2010-07-04 17 views
10

Yahoo'nun finansal API'sinden alıntılar almak için CURL C++ api kullanıyorum. Curl API ve kodum iyi çalışıyor gibi görünüyor, ancak CURL'ye istediğim URL'yi ziyaret ettiğimde "301" yönlendirme mesajı alıyorum. CURL’i 301 yönlendirmesine kadar takip etmek ve istediğim verileri almak için nasıl alabilirim? Ben alıyorum yanıtı İşteCURL 301 Yönlendirmelerini takip etmiyor, ne yapmam gerekiyor?

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

edilir: Burada

kullanıyorum URL İşte
<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> 

benim CURL başlatma seçenekleri

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

Ben değil mi' Benim kodum, tüm çalışıyor olduğu gibi, sadece CURL ile 301 woth ile takip genel bir yöntem gerekir.

cevap

13

PHP dünyasında, seçenek CURLOPT_FOLLOWLOCATION olarak adlandırılır. Sabit isimlerin standartlaştırıldığını ve aynı başlık dosyasından geldiğini varsayıyorum, bu yüzden bu sizin için çalışmalıdır.

curl_easy_setopt(eh, CURLOPT_FOLLOWLOCATION, 1); 

(veya bu bağlamda her neyse "boolean true".) Bir 30x durum kodunu alırken

Alternatif olarak, yeni bir adres için elle Location başlığını ayrıştırabilir. Açıkçası, "takip yeri" seçeneği, ikinci bir istek gerektirmediğinden çok daha kolaydır.

İlgili konular