2014-10-18 17 views
6
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')) 

Nihayet POST verilerini bilgim için uygun şekilde yapılandırdım, ancak şimdi bazı garip bağlantı hataları, herhangi bir fikir alıyorum? HATALAR:Python istekleri ile garip bağlantı iptal edilen hatalar elde ediliyor

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)) 

Bu 'bağlantıyı iptal etme' hatalarını neden aldığım hakkında herhangi bir düşünceniz var mı?

+1

senin sorunun üzerinde herhangi bir fikir var, ama yok başkasının hella 'GetResponse() beklenmedik bir anahtar kelime argüman 'traceback buffering'' var [İstekler bugtracker bir açıklama] (got tarafından karıştı eğer https://github.com/kennethreitz/requests/issues/1289#issuecomment-31294851). Uzun lafın kısası - OP'nin konusuyla ilgisiz. –

+0

Sonuç neden beklenmedik? Kimlik doğrulaması gerektiren içeriğe erişmeye çalışıyormuşsunuz gibi görünüyor, uzak ana makine kimliği doğrulanmadığını ve sonuç olarak "zorla" bağlantınızı kapattığını görür. –

+0

Başlıkları giriş sayfasından kapıyorsunuz. Bir oturum belirteci, csrf önleme belirteci, çerez veya uzak sunucunun "hey, bu POST bu başlık ile uyuşmadığını" düşünmesine neden olabilecek başka bir şey yakaladığınızda oraya giderken hiçbir gariplik olmadığından emin misiniz? bağlantı kapandı? – souldeux

cevap

2

Bu örnek için kullanıcı aracısı üstbilgilerini kullanabilirsiniz, gerekli olmayan giriş sayfası başlıklarını yakalayarak karmaşık hale getiriyorum. Ayrıca, sanırım yaptığınızı düşündüğüm gibi sid çerezini de bilmeniz gerekmiyor. POST verileriyle boş olarak ekleyebilirsiniz. Sadece hangi form verilerinin yukarıda belirtilen firebug veya benzeri yardımcı programlarla geçtiğini kontrol ettiğinizden emin olun.

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)