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 코드입니다 당신의 제안이 있다면 ...