как удалить ранее установленное поле реферера заголовка запроса из описателя curl? - PullRequest
2 голосов
/ 14 ноября 2011

Сначала я инициализирую ручку curl:

$ch = curl_init();

Затем я устанавливаю заголовки url и referer:

curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_REFERER,$referer);

И, наконец, выполняю инструкцию:

curl_exec($ch);

Теперь я могу использовать другой URL без закрытия и повторного открытия дескриптора, поэтому:

curl_setopt($ch,CURLOPT_URL,$another_url);

И здесь начинается головная боль, потому что я не знаю, как отключить заголовок реферера, который будет отправлен на сервер, конечно же, я 'мы пытались поместить false и null в CURLOPT_REFERER, но это приводит к тому, что поле referer становится пустым, то есть Referer: все еще отправляется на сервер, но без значения (это даже верно для спецификаций http?).

Можно ли вообще удалить заголовок, не закрывая и не восстанавливая ручку curl?

Я бы хотел этого избежать, потому что curl сохраняет соединение открытым в течение некоторого времени, если бы я постоянно закрывалобрабатывать при загрузке с того же хоста, это может занять больше времени.

Ответы [ 2 ]

6 голосов
/ 15 ноября 2011

Вы можете полностью удалить поле referer или любое другое поле, обычно обрабатываемое curl, передав его без слов после ":" в CURLOPT_HTTPHEADER:

curl_setopt($ch, CURLOPT_HTTPHEADER, array("Referer:"));

А в шапке он вообще не появится.

http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTHTTPHEADER

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

Заголовок Referer должен быть либо полным URI, либо URI относительно одного запрошенного:

http://www.w3.org/Protocols/HTTP/HTRQ_Headers.html#z14

Кажется, что пустой заголовок Referer соответствует спецификации, поэтому вы можете просто:

curl_setopt($ch,CURLOPT_REFERER,'');

Заголовок все равно появится, но будет пустым.

...