2014-01-17 3 views
0

Я хотел бы изменить следующий код для запуска использования 'запросов' модуля. У меня есть следующий код, который работает на веб-сайте:Как перевести запросы на URL, используя pycurl для python-запросов?

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 

Что я делаю неправильно что эти методы не ведут себя одинаково?

спасибо.

+0

Необходимо добавить свой след. Если это что-то связано с сертификатом ssl, попробуйте с session.post (url, message, verify = False) – gawel

+0

У меня нет следа, так как нет ошибки python. Ошибка возвращена с веб-сайта ... – roeiba

ответ

2

Использование Pycurl:

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-Agent и Accept заголовок. Это потому, что вы переписываете атрибут session.headers, который содержит эти заголовки по умолчанию. Попробуйте вместо этого:

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

  • Отсутствует Content-Type заголовок. Я думаю, вы передали строку как параметр message. Запросы не знают, что это application/x-www-form-urlencoded и поэтому не устанавливает соответствующий заголовок. Либо:

    • Установить заголовок себя
    • Лучше: пропуск запрашивает словарь ваших параметров. Они будут закодированы и объявлены правильно