2010-07-04 9 views
10

Używam CURL C++ api, aby uzyskać wyceny z finansowego API Yahoo. Zwinne API i mój kod wydają się działać dobrze, jednak otrzymuję komunikat przekierowania "301", gdy mówię CURL, aby odwiedził żądany URL. Jak mogę przekonać CURL do przejścia do przekierowania 301 i uzyskania żądanych danych?CURL nie obserwuje 301 przekierowań, co muszę zrobić?

Oto URL używam:

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

Oto odpowiedź otrzymuję:

<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> 

Oto moje opcje startowe CURL

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); 

Nie miałem” t opublikuj mój kod, ponieważ wszystko działa, po prostu potrzebuję ogólnej metody śledzenia kodu 301 z CURL.

Odpowiedz

13

W świecie PHP opcja ta nosi nazwę CURLOPT_FOLLOWLOCATION. Zakładam, że stałe nazwy są znormalizowane i pochodzą z tego samego pliku nagłówkowego, więc to powinno działać.

curl_easy_setopt(eh, CURLOPT_FOLLOWLOCATION, 1); 

(lub cokolwiek „logiczna prawda” jest w tym kontekście).

Alternatywnie, w momencie otrzymania kodu 30x stanu, można analizować nagłówek Location ręcznie na nowy adres. Oczywiście opcja "śledź lokalizację" jest znacznie łatwiejsza, ponieważ nie wymaga drugiej prośby.