2016-03-10 3 views
0

Я искал в Интернете, но не смог найти ответ на этот вопрос. Поэтому отправляйте его здесь.Curl CURLOPT_UPLOAD И CURLOPT_FOLLOWLOCATION не работают вместе (libcurl)

В моем коде, я отправляю двоичный поток к серверу, используя CURLOPT_UPLOAD значения ИСТИНЫ (запрос PUT) и настройку CURLOPT_READFUNCTION и CURLOPT_READDATA и CURLOPT_INFILESIZE_LARGE подходящего для передачи потока.

URL-адрес конечной точки, недавно перешедший на 301, постоянно перемещается. Я не хочу менять код, чтобы читать 301 и перенаправлять соответственно, потому что это похоже на интуитивный счетчик.

Видел, что CURLOPT_FOLLOWLOCATION информирует завиток для автоматической перенаправления. Но это не перенаправление, как ожидалось. Я вижу ссылку на POST + FOLLOWLOCATION, но не PUT + FOLLOWLOCATION, когда я googled.

Так что мой вопрос. Предполагается ли, что FOLLOWLOCATION будет работать с PUT в libcurl? Также, если нет, можете ли вы рассказать мне, какие существуют альтернативы для автоматического перенаправления?

+0

Вы пытались просто заменить 'curl_setopt ($ curl, CURLOPT_PUT, true)' с 'curl_setopt ($ curl, CURLOPT_CUSTOMREQUEST," PUT ")' keep 'FOLLOWLOCATION', как вы бы сделали с' POST'? –

+0

Попробуем это и посмотрим. – Swtsvn

+0

Я не использовал CURLOPT_PUT. Вместо этого он полагался на CURLOPT_UPLOAD, чтобы поместить двоичный поток, который работал нормально до перенаправления. В любом случае я добавил эти два. Но все же не перенаправляется автоматически. Все еще видя только ответ 301 в качестве окончательного кода ответа в отладке curl. => curl_easy_setopt (CurlHandle, CURLOPT_CUSTOMREQUEST, "PUT"); и \t \t curl_easy_setopt (CurlHandle, CURLOPT_FOLLOWLOCATION, 1); – Swtsvn

ответ

1

У меня возникла такая же проблема, но я заметил, что мои файлы терпят неудачу, когда я пытаюсь отправить многомерный массив. И поставьте мою полезную нагрузку в функцию http_build_query. Решение: Я кодирую всю мою полезную нагрузку только в одну строку и ставил свои файлы бок о бок с остальной частью полезной нагрузки. Поэтому я удалил функцию http_build_query и отправил свой массив данных. Он работает!

Похоже, что PHP не отправляет файлы, когда вы: одновременно добавляете многомерный массив + файлы + http_build_query.

Смежные вопросы