2015-01-30 2 views
1

헤더 및 데이터 (사용자 이름 및 비밀번호)와 함께 HTTP POST 요청을 수행하고 결과 쿠키를 검색하는 메소드를 생성하는 데 문제가 있습니다.Python 3.4 쿠키가 포함 된 HTTP POST 요청

def do_login(username, password): 
    headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36", 
       "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"} 
    cj = http.cookiejar.CookieJar() 
    req = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj)) 
    data = {"Username": username, "Password": password} 
    req.open("http://example.com/login.php", data) 

하지만 방법을 변경하려고 할 때마다 나는 점점 예외를 유지 :

여기에 지금까지 내 최신 시도합니다. 또한 응답 쿠키는 CookieJar cj에 저장되거나 요청 쿠키를 보내는 용도로만 사용됩니까?

답변

1

일부 연구 결과 데이터를 req.open에 대한 인수로 직접 전달할 수 없으며 URL로 인코딩 된 문자열로 변환해야하는 것으로 보입니다. 나를 위해 일한 해결책은 다음과 같습니다.

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36", 
      "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"} 

cj = http.cookiejar.CookieJar() 
req = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj)) 
req.addheaders = list(headers.items()) 

# The data should be URL-encoded and then encoded using UTF-8 for best compatilibity 
data = urllib.parse.urlencode({"Username": username, "Password": password}).encode("UTF-8") 
res = req.open("http://example.com/login.php", data)