Подтвердить что ты не робот

CURL не соответствует 301 переадресации, что мне нужно сделать?

Я использую CURL С++ api для получения котировок из финансового API Yahoo. Мне кажется, что curl api и мой код работают нормально, однако я получаю сообщение о переадресации "301", когда я говорю CURL, чтобы посетить URL-адрес, который я хочу. Как я могу получить CURL для перехода к перенаправлению 301 и получить нужные данные?

Вот URL, который я использую:

http://download.finance.yahoo.com/d/quotes.csv?e=.csv&s=WSF,WSH&f=b2b3s

Вот ответ, который я получаю:

<HEAD><TITLE>Redirect</TITLE></HEAD>
<BODY BGCOLOR="white" FGCOLOR="black">
<FONT FACE="Helvetica,Arial"><B>
 "<em>http://download.finance.yahoo.com/d/quotes.csv?e=.csv&s=WSF,WSH,WSM,WSO,WST,WTI,WTM,WTR,WTS,WTU,WTW,WU,WWE,WWW,WX,WXS,WY,WYN,X,XAA,XCJ,XCO,XEC,XEL,XEL-A,XEL-E,XFB,XFD,XFH,XFJ,XFP,XFR,XIN,XJT,XKE,XKK,XKN,XKO,XL,XL-Y,XOM,XRM,XRX,XVF,XVG,Y,YGE,YPF,YSI,YUM,YZC,ZB-A,ZB-B,ZB-C,ZEP,ZF,ZLC,ZMH,ZNH,ZQK,ZTR,ZZ,ZZC&f=b2b3ccd1d2ghjkk2k3l2l3mm2m3m4m5m6m7m8opst7vw</em>".<p></B></FONT>

<!-- default "Redirect" response (301) -->
</BODY>

Вот мои параметры CURL init

CURL *eh = curl_easy_init();

curl_easy_setopt(eh, CURLOPT_WRITEFUNCTION, cb);
curl_easy_setopt(eh, CURLOPT_HEADER, 0L);
curl_easy_setopt(eh, CURLOPT_URL, url);
curl_easy_setopt(eh, CURLOPT_PRIVATE, url);
curl_easy_setopt(eh, CURLOPT_VERBOSE, 0L);

curl_multi_add_handle(cm, eh);

Я не размещал свой код, так как он работает, мне просто нужен общий метод следования через 301 с CURL.

4b9b3361

Ответ 1

В мире PHP опция имеет название CURLOPT_FOLLOWLOCATION. Я предполагаю, что константные имена стандартизированы и поступают из одного и того же заголовочного файла, поэтому это должно сработать для вас.

curl_easy_setopt(eh, CURLOPT_FOLLOWLOCATION, 1); 

(или что-то вроде "boolean true" в этом контексте.)

В качестве альтернативы при получении кода состояния 30x вы можете вручную разобрать заголовок Location для нового адреса. Очевидно, что опция "следовать за местоположением" намного проще, так как она не требует второго запроса.