Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.135.183.187] |
|
Сообщ.
#1
,
|
|
|
Используя библиотеку synapse, нужно отобразить код страницы в Memo1. Для этих целей использую кнопку.
procedure TForm1.Button1Click(Sender: TObject); var http:THttpSend; pList : TStringList; begin pList:= TStringList.Create; HTTP:=THTTPSend.Create; try HTTP.Protocol := '1.1'; HTTP.UserAgent:= 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36'; HTTP.Headers.Add('Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'); HTTP.Headers.Add('Accept-Language: en-US,en;q=0.5'); HTTP.Headers.Add('Connection: keep-alive'); HTTP.Sock.CreateWithSSL(TSSLOpenSSL); HTTP.Sock.SSLDoConnect; HTTP.HTTPMethod('GET','https://vagon-igr.ru/test1/'); pList.LoadFromStream(HTTP.Document); Memo1.Text:=''; Memo1.Lines.Add(pList.Text); finally pList.free; HTTP.free; end; end; При попытке нажатии на кнопки выводится сообщение в Memo1. Цитата <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>406 Not Acceptable</title> </head><body> <h1>Not Acceptable</h1> <p>An appropriate representation of the requested resource could not be found on this server.</p> </body></html> Как исправить, чтобы отображался код страницы. На одном сайте прочитала, что проблема может заключаться в не соответствии кодировок. Цитата 406 Not Acceptable Пользователь пытается посмотреть документ, который существует на сервере, но имеет кодировку\язык\формат, которые не поддерживаются у пользователя. В итоге нужно искать причину в заголовках Content-Language, Content-Encoding или Content-Type. Может в параметрах HTTP нужно дописать дополнительные свойства? |
Сообщ.
#2
,
|
|
|
Попробуй с такими параметрами
Цитата accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 accept-encoding: gzip, deflate, br accept-language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7 |
Сообщ.
#3
,
|
|
|
Rouse_, я сделала как вы сказали.
HTTP.Protocol := '1.1'; HTTP.UserAgent:= 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36'; HTTP.Headers.Add('Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8'); HTTP.Headers.Add('application/signed-exchange;v=b3;q=0.9'); HTTP.Headers.Add('Accept-encoding: gzip, deflate, br'); HTTP.Headers.Add('Accept-language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7'); HTTP.Sock.CreateWithSSL(TSSLOpenSSL); HTTP.Sock.SSLDoConnect; HTTP.HTTPMethod('GET','https://vagon-igr.ru/test1/'); pList.LoadFromStream(HTTP.Document); Memo1.Text:=''; Memo1.Lines.Add(pList.Text); В итоге получила ошибку, только другу. Цитата <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>400 Bad Request</title> </head><body> <h1>Bad Request</h1> <p>Your browser sent a request that this server could not understand.<br /> </p> </body></html> |
Сообщ.
#4
,
|
|
|
Попробуйте вообще убрать заголовок Accept, пусть сервер сам решает.
|
Сообщ.
#5
,
|
|
|
Цитата // HTTP.Headers.Add('Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8'); // HTTP.Headers.Add('application/signed-exchange;v=b3;q=0.9'); // HTTP.Headers.Add('Accept-encoding: gzip, deflate, br'); // HTTP.Headers.Add('Accept-language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7'); Если убрать четыре эти строчки то работает. У меня кракозябры отображаются вместо русского текста, как в заголовке указать кодировку UTF-8? Цитата <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Коммент</title> </head> <body> <form method="post" id="comment_form" action=""> <p><label>Ваше РёРјСЏ: <br><input type="text" name="login" size="20" value=""></label></p> <p><label>Текст комментария: <br> <textarea name="message" cols="35" rows="4" id="message"></textarea></label></p> <p><input type="submit" name="send" id="send" value="Коментировать"><span id="resp"></span></p> <p> </p> </form> </body> </html> |
Сообщ.
#6
,
|
|
|
Цитата Olga28 @ У меня кракозябры отображаются вместо русского текста, как в заголовке указать кодировку UTF-8? UTF-8 нужно не в заголовке http запроса указывать, а при загрузке в StringList. pList.LoadFromStream(HTTP.Document, TEncoding.UTF8) Хотя в приведенном коде этот стринг лист не нужен, можно сразу в Memo грузить. Memo1.Lines.LoadFromStream(HTTP.Document, TEncoding.UTF8) |