2013-06-11 5 views
0

pycurl을 사용하여 웹 사이트에서 데이터를 가져 오려고합니다. PHP에서 비슷한 스크립트를 만들었고 (curl을 사용하여) 비슷한 스크립트를 만들었지 만 파이썬에서는 빈 응답을 얻습니다. PHP에서 비슷한 문제가 발생했습니다. 사이트에서 게시물 데이터를 가져 와서 세션을 초기화하고 결과 페이지로 리디렉션하지만 쿠키가 허용되지 않으면 리디렉션 대신 빈 응답을 반환합니다. 이 사이트의 코드에 액세스 할 수 없습니다. COOKIEFILE 및 COOKIEJAR 옵션을 사용하면 문제가 해결됩니다. 내가 사용하는 코드쿠키와 함께 pycurl 사용시 문제가 발생했습니다.

<?php 
$anul = 2009; 
$idnp = "2000000000000"; 
$seria_diploma = "AB000000000"; 
$url = "http://acte.edu.md/handler.php"; 
$cookie_file = tempnam("tmp", "cookie"); 
$curl_session = curl_init($url); 
curl_setopt($curl_session, CURLOPT_POST, 1); 
$post_fields = "an=$anul&idnp=$idnp&=$seria_diploma&Submit=OK"; 
curl_setopt($curl_session, CURLOPT_POSTFIELDS,$post_fields); 
curl_setopt($curl_session, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($curl_session, CURLOPT_COOKIEFILE, $cookie_file); 
curl_setopt($curl_session, CURLOPT_COOKIEJAR, $cookie_file); 
curl_setopt($curl_session, CURLOPT_RETURNTRANSFER, true); 
$result = curl_exec($curl_session); 
curl_close($curl_session); 
echo $result; 

파이썬에서 동일한 옵션을 사용하여 내가 HTTP 코드 (200) 대신에 여기 (302)의 빈 응답을 얻을 수있다 :

url = "http://acte.edu.md/handler.php" 
    post_data = dict({ 
      "an":2009, 
      "idnp":"2000000000000", 
      "a":"AB000000000", 
      "Submit":"OK" 
    }) 
    buf = StringIO.StringIO() 
    c = pycurl.Curl() 

    c.setopt(pycurl.URL,url) 
    c.setopt(pycurl.WRITEFUNCTION, buf.write) 
    #c.setopt(pycurl.CONNECTTIMEOUT,10000) 
    cookiefile = os.tempnam(_APP_ROOT_PATH+"temp_files","cookie") 
    c.setopt(pycurl.COOKIEFILE, cookiefile) 
    c.setopt(pycurl.COOKIEJAR, cookiefile) 
    c.setopt(pycurl.FOLLOWLOCATION, 1) 
    #c.setopt(pycurl.MAXREDIRS, 5) 
    c.setopt(pycurl.POST, 1) 
    c.setopt(pycurl.POSTFIELDS, urllib.urlencode(post_data)) 
    c.setopt(pycurl.VERBOSE, True) 
    c.perform() 

    response += "ERROR:" + c.errstr() 
    response += c.getinfo(pycurl.HTTP_CODE).__str__()+ c.getinfo(pycurl.EFFECTIVE_URL) 
    c.close()  

알려주세요 이 PHP 코드입니다 당신의 제안이 있다면 ...

답변

0

문제는 유효하지 않은 POST 매개 변수입니다. 검증 페이지를 통과하지 못하면 빈 응답을 반환합니다.

관련 문제