2014-01-17 1 views
0

'요청'모듈을 사용하려면 다음 코드를 수정하고 싶습니다.pycurl을 사용하여 url 요청을 python-requests로 변환하는 방법?

def post(url, message, key, sign): 

    curl = pycurl.Curl() 
    curl.setopt(pycurl.URL, url) 
    curl.setopt(pycurl.SSL_VERIFYPEER, 0) 
    curl.setopt(pycurl.SSL_VERIFYHOST, 0) 
    buf = cStringIO.StringIO() 
    curl.setopt(pycurl.WRITEFUNCTION, buf.write) 
    curl.setopt(pycurl.POSTFIELDS, message) 
    curl.setopt(pycurl.HTTPHEADER, ['Key:' + key, 
           'Sign:' + (sign)]) 
    curl.perform() 
    response = buf.getvalue() 
    buf.close() 
    return response   

내가 요청과 함께 웹 사이트에 접속 시도하고 다음 코드를 사용하여 잘못된 요청 값을 거부있어 :

def post(url, message, key, sign): 
    import requests 
    session = requests.session() 
    session.headers = {'Key': key, 'Sign': sign} 
    response = session.post(url, message) 
    return response 

내가 잘못하고있는 중이 야 무엇을 나는 웹 사이트에 노력하고 다음 코드가 이 방법들은 똑같은 행동을하지 않습니까?

감사합니다. Pycurl를 사용

+0

추적 코드를 추가해야합니다. ssl certif와 관련이 있다면 session.post (url, message, verify = False)로 시도하십시오. – gawel

+0

파이썬 오류가 없으므로 역 추적이 없습니다. 오류가 웹 사이트에서 반환되었습니다 ... – roeiba

답변

2

:

POST /post HTTP/1.1 
User-Agent: PycURL/7.32.0 
Host: 127.0.0.1:4000 
Accept: */* 
Key:key 
Sign:sign 
Content-Length: 3 
Content-Type: application/x-www-form-urlencoded 

foo 

요청 :

하여 오류가 발생할 수있는 몇 가지 차이가 ​​있습니다
POST /post HTTP/1.1 
Host: 127.0.0.1:4000 
Accept-Encoding: identity 
Content-Length: 3 
Key: key 
Sign: sign 

foo 

:

  • User-AgentAccept 헤더를 누락이. 이 (가)session.headers 속성을 덮어 써서 기본 헤더를 포함하고 있기 때문입니다. 대신이 시도 :

    session.headers.update({'Key': key, 'Sign': sign})

  • Content-Type 헤더가 없습니다. 나는 당신이 message 매개 변수로 문자열을 전달했다고 생각합니다. 요청은 이것이 application/x-www-form-urlencoded이라는 것을 모르기 때문에 관련 헤더를 설정하지 않습니다. 다음 중 하나를 통과하여 매개 변수의 사전을 요청합니다

    • 자신이
    • 더 나은 헤더를 설정합니다. 인코딩되고 올바르게 선언됩니다.
관련 문제