获取奇怪的连接会中断python请求的错误

时间:2014-10-18 02:49:47

标签: python python-requests

import json
import string
import socket
import requests
from bs4 import BeautifulSoup

# Default header to be used first.
headers={"User-Agent": "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36"}

# Create a session using requests to log in.
with requests.Session() as s:
    # Grab new headers and cookies from login page
    t = s.get("http://minewind.com/forums/ucp.php?mode=login", headers=headers)

    sid = t.cookies['phpbb3_qpac2_sid'] # Store sid to be used in POST data.


    # POST data to be sent
    payload = {"login": "Login",
               "password": "*********",
               "redirect": "./ucp.php?mode=login",
               "redirect": "index.php",
               "sid": sid,
               "username": "myusername"
               }
    # Send POST data to the login page, including proper headers.
    s1 = s.post("http://minewind.com/forums/ucp.php?mode=login", data=payload, headers=t.headers)

    print (t.headers)

    # Check to see if we are really logged in, WHICH WE ARENT!!!! ;_;
    s2 = s.get("http://minewind.com/forums/index.php", headers=t.headers)

    # Pretty up the code and grab links.
    perty = BeautifulSoup(s2.content)
    perty.prettify()


    for links in perty.find_all('a'):
        print (links.get('href'))

我最终根据我的知识正确配置了POST数据,但现在我得到了一些奇怪的连接错误,任何想法?错误:

Traceback (most recent call last):
  File "C:\Python33\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 331, in _make_request
    httplib_response = conn.getresponse(buffering=True)
TypeError: getresponse() got an unexpected keyword argument 'buffering'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Python33\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 516, in urlopen
    body=body, headers=headers)
  File "C:\Python33\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 333, in _make_request
    httplib_response = conn.getresponse()
  File "C:\Python33\lib\http\client.py", line 1143, in getresponse
    response.begin()
  File "C:\Python33\lib\http\client.py", line 354, in begin
    version, status, reason = self._read_status()
  File "C:\Python33\lib\http\client.py", line 316, in _read_status
    line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
  File "C:\Python33\lib\socket.py", line 297, in readinto
    return self._sock.recv_into(b)
ConnectionResetError: [WinError 10054] An existing connection was forcibly closed by the remote host

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Python33\lib\site-packages\requests\adapters.py", line 362, in send
    timeout=timeout
  File "C:\Python33\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 559, in urlopen
    _pool=self, _stacktrace=stacktrace)
  File "C:\Python33\lib\site-packages\requests\packages\urllib3\util\retry.py", line 245, in increment
    raise six.reraise(type(error), error, _stacktrace)
  File "C:\Python33\lib\site-packages\requests\packages\urllib3\packages\six.py", line 309, in reraise
    raise value.with_traceback(tb)
  File "C:\Python33\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 516, in urlopen
    body=body, headers=headers)
  File "C:\Python33\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 333, in _make_request
    httplib_response = conn.getresponse()
  File "C:\Python33\lib\http\client.py", line 1143, in getresponse
    response.begin()
  File "C:\Python33\lib\http\client.py", line 354, in begin
    version, status, reason = self._read_status()
  File "C:\Python33\lib\http\client.py", line 316, in _read_status
    line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
  File "C:\Python33\lib\socket.py", line 297, in readinto
    return self._sock.recv_into(b)
requests.packages.urllib3.exceptions.ProtocolError: ('Connection aborted.', ConnectionResetError(10054, 'An existing con
nection was forcibly closed by the remote host', None, 10054))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\Anthony\site.py", line 28, in <module>
    s2 = s.get("http://minewind.com/forums/index.php", headers=t.headers)
  File "C:\Python33\lib\site-packages\requests\sessions.py", line 469, in get
    return self.request('GET', url, **kwargs)
  File "C:\Python33\lib\site-packages\requests\sessions.py", line 457, in request
    resp = self.send(prep, **send_kwargs)
  File "C:\Python33\lib\site-packages\requests\sessions.py", line 569, in send
    r = adapter.send(request, **kwargs)
  File "C:\Python33\lib\site-packages\requests\adapters.py", line 407, in send
    raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetError(10054, 'An existing connection was for
cibly closed by the remote host', None, 10054))

任何有关我为什么要让这些连接中止的想法?错误?

1 个答案:

答案 0 :(得分:2)

您可以使用此实例的用户代理标头,我通过抓取不必要的登录页面标题使其复杂化。此外,您不需要像我想象的那样事先知道sid cookie。您可以将POST数据包含为空。只需确保您正在检查使用上述firebug或类似实用程序传递的表单数据。

import requests
from bs4 import BeautifulSoup
import sys

headers={"User-Agent": "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36"}

with requests.Session() as s:

    payload = {"login": "Login",
               "password": "mypassword",
               "redirect": "./ucp.php?mode=login",
               "redirect": "index.php",
               "sid": "",
               "username": "myusername"}

    url = "http://minewind.com/forums/index.php"

    s1 = s.post("http://minewind.com/forums/ucp.php?mode=login", data=payload, headers=headers)
    s2 = s.get(url, headers=headers)