Ответ CURL отличается от ответа на запрос, отправленный из браузера - PullRequest
2 голосов
/ 03 июня 2011

Попытка отправить форму с CURL, как через PHP, так и из командной строки. Ответ от сервера состоит из нулевого содержимого (заголовки размещены ниже).

Когда тот же URL-адрес отправляется через браузер, ответ состоит из правильной веб-страницы.

Попытка отправки параметров запроса CURL через POST и GET через каждый из следующих флагов командной строки curl "-d" "-F" и "-G".

Если параметры строки запроса размещены с флагом «-d», результирующий заголовок будет:

HTTP / 1.1 302 Временно перемещено
Дата: четверг, 02 июня 2011 21:41:54 GMT
Сервер: Apache
Набор файлов cookie: JSESSIONID = DC5F435A96A353289F58593D54B89570; Path = / XXXXXXX
P3P: CP = "CAO PSA OUR"
Расположение: http://www.XXXXXXXX.com/
Длина контента: 0
Подключение: закрыть
Тип содержимого: text / html; charset = UTF-8
Набор cookie: XXXXXXXXXXXXXXXX = 1318103232.20480.0000; путь = /


Если параметры строки запроса размещены с флагом «-F», результирующий заголовок будет:

HTTP / 1.1 100 Продолжить

Внутренняя ошибка сервера HTTP / 1.1 500
Дата: четверг, 02 июня 2011 21:52:54 GMT
Сервер: Apache
Длина контента: 1677
Подключение: закрыть
Тип содержимого: text / html; charset = utf-8
Набор cookie: XXXXXXXXXXXXXX = 1318103232.20480.0000; путь = /
Варьируется: Accept-Encoding

<code><html><head><title>Apache Tomcat/5.5.26 - Error report</title><style><!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}HR {color : #525D76;}--></style> </head><body><h1>HTTP Status 500 - </h1><HR size="1" noshade="noshade"><p><b>type</b> Exception report</p><p><b>message</b> <u></u></p><p><b>description</b> <u>The server encountered an internal error () that prevented it from fulfilling this request.</u></p><p><b>exception</b> <pre>javax.servlet.ServletException: Servlet execution threw an exception<br>

основная причина

java.lang.NoClassDefFoundError: com/oreilly/servlet/multipart/MultipartParser<br>
    com.corsis.tuesday.servlet.mp.MPRequest.<init>(MPRequest.java:27)<br>
    com.corsis.tuesday.servlet.mp.MPRequest.<init>(MPRequest.java:21)<br>
    com.corsis.tuesday.servlet.TuesdayServlet.doPost(TuesdayServlet.java:494)<br>
    javax.servlet.http.HttpServlet.service(HttpServlet.java:710)<br>
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)<br>

примечание Полная трассировка стека основной причины доступна в Apache Tomcat /5.5.26 logs.


Apache Tomcat / 5.5.26

Вопросы:

  1. Что может заставить сервер отвечать по-разному в зависимости от характера запроса CURL.

  2. Как успешно отправить запрос через CURL?

Ответы [ 3 ]

1 голос
/ 18 ноября 2011

HTTP/1.1 100 Continue

У меня были проблемы, связанные с этим заголовком ранее. Некоторые серверы просто не понимают этого. Попробуйте эту опцию переопределить заголовок Expect.

curl_setopt( $curl_handle, CURLOPT_HTTPHEADER, array( 'Expect:' ) );

0 голосов
/ 31 мая 2017

Я только что имел опыт с этим, и что исправило это было удивительно.В моей ситуации я заходил на сервер, чтобы я мог загрузить файл, заставить сервер поработать над ним, а затем загрузить новый файл.Сначала я сделал это в Chrome и использовал инструменты dev для захвата более 100 HTTP-запросов в этой простой транзакции.Большинство из них просто захватывают ресурсы, которые мне не нужны, если я пытаюсь сделать все это из командной строки, поэтому я отфильтровал только те, которые, как я знал, мне нужно.

Первоначально это сводилось к GET, чтобы установить cookie и войти в систему с именем пользователя и паролем, POST для загрузки файла, POST для выполнения работы над файлом и GET для получения новогофайл.Я не мог получить первый POST, чтобы фактически работать все же.Предполагается, что ответом этого POST будет информация, содержащая идентификатор загрузки, время загрузки и т. Д., Но вместо этого я получал пустые списки JSON, хотя состояние было 200 OK.

Я использовал CURL, чтобы подделать запросы отточно браузер (копирование User-Agent, переопределение Expect и т. д.) и все равно ничего не получалось.Затем я начал произвольно добавлять некоторые запросы, полученные из Chrome, между первым GET и POST, и low, и вот после добавления запроса GET для истории JSON до того, как POST POST фактически вернул то, что предполагалось.

TL; DR Некоторые веб-сайты требуют больше запросов после первоначального входа в систему, прежде чем вы сможете выполнить POST.Я бы попытался зафиксировать успешный обмен между сервером и браузером и посмотреть на все запросы.Некоторые запросы могут быть не такими лишними, как кажется.

0 голосов
/ 03 июня 2011

Чтобы добавить к тому, что сказал Ричард, я видел случаи, когда серверы проверяли строку User-Agent и вели себя по-разному в зависимости от ее значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...