[решено] Ошибка 400 в POST-запросе (PHP)

Ответить
Аватара пользователя
Luzuk

[решено] Ошибка 400 в POST-запросе (PHP)

Сообщение Luzuk »

Здравствуйте!



До этого писал функцию для
парсера
.


Все нормально работало, а теперь в ответ получаю: HTTP Error 400. The size of the request headers is too long.



Вот код функции:



PHP код:

Код: Выделить всё

function post_content ($url,$postdata) {

  $uagent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0";

  $headers = array

                (

                'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',

                'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3',

                'Accept-Encoding: deflate'

   );

  

  $ch = curl_init();

  curl_setopt($ch, CURLOPT_URL, $url);                // установка URL и других необходимых параметров

  curl_setopt($ch, CURLOPT_POST, true);                // установка метода передачи параметров

//  curl_setopt($ch, CURLOPT_USERAGENT, $uagent);        // установка браузера

  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);    // возвращает веб-страницу

//  curl_setopt($ch, CURLOPT_HEADER, false);            // не возвращает заголовки

  curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);    // добавляем заголовков

   curl_setopt($ch, CURLOPT_PROXY, 'x.x.x.x:xxxx');    // Прокси 

   curl_setopt($ch, CURLOPT_PROXYUSERPWD,'user:pass');// авторизация  

  curl_setopt($ch, CURLOPT_REFERER, $url);// Подделываем значение - откуда пришли данные.

//  curl_setopt($ch, CURLOPT_AUTOREFERER, true);

  curl_setopt($ch, CURLOPT_COOKIEJAR, "elib_cookie.txt");    // Функции для обработки установливаемых сайтом кук.

  curl_setopt($ch, CURLOPT_COOKIEFILE,"elib_cookie.txt");    // Функции для обработки установливаемых сайтом кук.

  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);            // разрешить переадресацию

  curl_setopt($ch, CURLOPT_ENCODING, "");                    // обрабатывает все кодировки

  curl_setopt($ch, CURLOPT_TIMEOUT, 120);                    // таймаут ответа

//  curl_setopt($ch, CURLOPT_FAILONERROR, true);                    // подробный отчет об ошибках

  curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);            //формируем сам запрос





  $content = curl_exec( $ch );

  $err     = curl_errno( $ch );

  $errmsg  = curl_error( $ch );

  $header  = curl_getinfo( $ch );

  curl_close( $ch );



  $header['errno']   = $err;

  $header['errmsg']  = $errmsg;

  $header['content'] = $content;

  return $header;

} 








Использую ее здесь:



PHP код:

Код: Выделить всё

$url = 'http://elibrary.ru/authors.asp';



$post='authors_all=&pagenum=&authorbox_name=&selid=&orgid=984&orgadminid=&surname=&codetype=SPIN&codevalue=

&town=&countryid=&orgname=%D0%92%D0%BB%D0%B0%D0%B4%D0%B8%D0%B2%D0%BE%D1%81%D1%82%D0%BE%D0%BA%D1%81%D0

%BA%D0%B8%D0%B9+%D0%B3%D0%BE%D1%81%D1%83%D0%B4%D0%B0%D1%80%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B

%D0%B9+%D1%83%D0%BD%D0%B8%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D1%82%D0%B5%D1%82+%D1%8D%D0%BA%D0%BE%D0%BD%D0

%BE%D0%BC%D0%B8%D0%BA%D0%B8+%D0%B8+%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D0%B0&rubriccode=&sortorder=0

&order=0&hid741746=%D0%9C%D0%B0%D1%81%D0%BB%D0%BE%D0%B2%D1%81%D0%BA%D0%B0%D1%8F+%D0%9E+%D0%92&authorboxid

=0';



$result = post_content( $url, $post );



echo "errno ".$result['errno']."
 

     errmsg ".$result['errmsg']."


     content ".$result['content']."
"; 








Как я понял на сайте, что-то поменяли....

Перехватил POST-запрос с помощью FireBug, пробовал скопировать от туда POST-запрос полностью, толку ноль!

Вот что было в FireBug:





Заголовок запроса

[spoiler]POST
http://elibrary.ru/authors.asp
HTTP/1.1



Host: elibrary.ru



User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0



Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8



Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3



Accept-Encoding: gzip, deflate



Referer:
http://elibrary.ru/authors.asp




Cookie: UserID=1475842157; SesCookieID=358975791; __utma=216012346.286143210.1435126771.1445224911.1454871428.6; __utmz=216042306.1435126771.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmc=216042306; __utmb=216154306.1.10.1457891428; __utmt=1



Connection: keep-alive[/spoiler]








Заголовок ответа

[spoiler]HTTP/1.0 200 OK



Cache-Control: private



Content-Length: 225396



Content-Type: text/html; Charset=UTF-8



Server: Microsoft-IIS/7.0



X-Powered-By: ASP.NET



Date: Mon, 19 Oct 2015 05:10:49 GMT



X-Cache: MISS from libnh.vvsu.ru, MISS from nh.vvsu.ru



X-Cache-Lookup: MISS from libnh.vvsu.ru:3128, MISS from nh.vvsu.ru:3128



Via: 1.0 libnh.vvsu.ru (squid), 1.0 nh.vvsu.ru (squid)



Proxy-Connection: keep-alive[/spoiler]








Запрос заголовка из потока загрузки

[spoiler]Content-Length

610

Content-Type

application/x-www-form-urlencoded[/spoiler]








POST(исходный код)

[spoiler]authors_all=&pagenum=&authorbox_name=&selid=&orgid=984&orgadminid=&surname=&codetype=SPIN&codevalue=

&town=&countryid=&orgname=%D0%92%D0%BB%D0%B0%D0%B4%D0%B8%D0%B2%D0%BE%D1%81%D1%82%D0%BE%D0%BA%D1%81%D 0

%BA%D0%B8%D0%B9+%D0%B3%D0%BE%D1%81%D1%83%D0%B4%D0%B0%D1%80%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B

%D0%B9+%D1%83%D0%BD%D0%B8%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D1%82%D0%B5%D1%82+%D1%8D%D0%BA%D0%BE%D0%BD%D 0

%BE%D0%BC%D0%B8%D0%BA%D0%B8+%D0%B8+%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D0%B0&rubriccode=&sortorder= 0

&order=0&hid741746=%D0%9C%D0%B0%D1%81%D0%BB%D0%BE%D0%B2%D1%81%D0%BA%D0%B0%D1%8F+%D0%9E+%D0%92&author boxid

=0[/spoiler]
Аватара пользователя
Luzuk

Re: [решено] Ошибка 400 в POST-запросе (PHP)

Сообщение Luzuk »

Нашел причину Изображение

Что-то не то было с сессией.

Добавил



PHP код:

Код: Выделить всё

curl_setopt($ch, CURLOPT_COOKIESESSION, true);            //начинает новую сессию 






И все заработало Изображение





А бился с этим почти неделю....................
Ответить

Вернуться в «Вебмастеру»