Можно убедить, что вихревой бэкенд PHP, чтобы прекратить делать эти 100 продолжает вещь путем установки явного заголовка запроса:
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));
Таким образом, можно отправлять запрос однако долго, Вы когда-либо хотели бы, и завихрение не сделает двойного сообщения фазы.
Я вел блог об этом почти два года назад.
В странице руководства для curl_setopt говорится относительно CURLOPT_POSTFIELDS
"Полные данные для регистрации в операции "POST" HTTP. Для регистрации файла предварительно ожидайте имя файла с и используйте полный путь. Это может или быть передано как строка urlencoded как 'para1=val1¶2=val2&...' или как массив с именем поля, столь же ключевым и полевые данные как значение".
Могло случиться так, что Ваше значение рассматривают, как будто это был urlencoded, и таким образом похож на большое длинное имя без значения. Что-то где-нибудь решает усечь то имя.
Возможно, Вы могли изменить его к чему-то как
$post_data = "data=".str_repeat('x', $char_count);
Оказывается, что это было слишком легко, и проблема была немного глубже. Так, как отладить?
Другая тактика отладки могла бы быть должна сформулировать вихревую командную строку, которая достигает того же самого, и имейте его, произвел детали Запроса HTTP, поскольку это делает их.
Можно устранить сервер из уравнения, выполняют запрос вручную, например, telnetting для портирования 80 на сервере и отправке его запрос> 1 024 символа
POST /test/recipient.php HTTP/1.0
Host: gpx3quaa.joyent.us
Content-Length:1028
xxxxx(I put 1028 chars here, no point copying them all here!)
Я получил этот ответ
HTTP/1.0 200 OK
Connection: close
Content-type: text/html; charset=UTF-8
Content-Length: 19
Date: Tue, 20 Jan 2009 21:35:16 GMT
Server: lighttpd/1.4.19
This was a triumph.Connection closed by foreign host.
Так, по крайней мере, Вы теперь знаете, что это - все на стороне клиента, возможной некоторая опция CURL или параметр конфигурации где-нибудь :(
Проблема заинтриговала меня так, я вырыл глубже
Если Вы используете CURLOPT_VERBOSE=>true
, Вы будете видеть, что ЗАВИХРЕНИЕ отправляет дополнительный заголовок на больших сообщениях:Expect: 100-Continue
. Вашему lighttpd серверу не нравится это, это казалось бы.
Можно мешать ЗАВИХРЕНИЮ делать это, вынуждая это использовать HTTP/1.0 с CURLOPT_HTTP_VERSION=>CURL_HTTP_VERSION_1_0
в Вашем curl_setopt массиве options.
У меня была похожая проблема с сервером IIS, использующим SSL v3.
Я продолжал получать следующую ошибку cURL, когда CURLOPT_POSTFIELDS было больше 1024:
52 - SSL read: error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number, errno 0
Добавление CURLOPT_HTTPHEADER: «Ожидается: «Решил проблему для меня.
Большое спасибо за эту тему!