2017-03-09 33 views
2

Ich möchte Cookies verwenden, die von meinem Chrom kopieren, aber viel Fehler machen.Wie verwendet man Cookies in Python 3?

import urllib.request 
import re 

def open_url(url): 
header={"User-Agent":r'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'} 
Cookies={'Cookie':r"xxxxx"} 
Request=urllib.request.Request(url=url,headers=Cookies) 
response=urllib.request.urlopen(Request,timeout=100) 
return response.read().decode("utf-8") 

Wohin geht mein Code falsch? Ist das headers = Cookies?

+1

der Cookie ist nicht die Header. Also pass nicht so auf. Sie müssen höchstwahrscheinlich auf das Cookiejar-Modul schauen. Es ist jedoch nicht trivial, also ist der einfachste Weg zweifellos die Verwendung von Anfragen. –

+0

Es ist kein schlechter Versuch; Lassen Sie mich nachdrücklich dazu ermutigen, eine höhere Bibliothek zu verwenden, die Norm lautet "Anfragen" für synchronen Code. Wie kommt es auch, dass 'header'-Variable nicht verwendet wird? Haben Sie vor, einen Header zu erstellen, der sowohl die Felder "User-Agent" als auch "Cookie" enthält? Schließlich empfehle ich, zuerst mit der Befehlszeile mit 'httpie' zu ​​experimentieren. –

Antwort

0

Sie können eine bessere Bibliothek (IMHO) verwenden - requests.

import requests 

headers = { 
    'User-Agent' : 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36' 
} 

cookies = dict(c1="cookie_numba_one") 

r = requests.get('http://example.com', headers = headers, cookies = cookies) 
print(r.text) 
2

Der richtige Weg, wenn urllib.request verwendet, ist ein OpenerDirector mit einem bevölkerten verwenden CookieProcessor:

cookieProcessor = urllib.request.HTTPCookieProcessor() 
opener = urllib.request.build_opener(cookieProcessor) 

dann verwenden Sie opener und es werden die Cookies automatisch verarbeiten:

response = opener.open(request,timeout=100) 

Standardmäßig wird das CookieJar (http.cookiejar.CookieJar) in einem einfachen Speicher verwendet, aber Sie können einenverwenden in Sie 210 brauchen eine langfristige Lagerung von persistente Cookies oder sogar eine http.cookiejar.MozillaCookieJar wenn Sie in einem cookies.txt jetzt Vermächtnis Mozilla Format


Wenn Sie die Verwendung von Cookies bestehenden in Ihrem Web-Browser, Sie gespeichert persistente Cookies verwenden möchten Sie müssen sie zuerst in einer cookie.txt-kompatiblen Datei speichern und in ein MozillaCookieJar laden. Für Mozilla finden Sie ein Add-on Cookie Exporter. Für andere Browser müssen Sie manuell eine cookie.txt-Datei erstellen, indem Sie den Inhalt der Cookies lesen, die Sie in Ihrem Browser benötigen. Das Format finden Sie in The Unofficial Cookie FAQ. Auszüge:

... jede Zeile enthält ein Name-Wert-Paar. Ein Beispiel cookies.txt Datei kann einen Eintrag hat, der wie folgt aussieht:

.netscape.com WAHR/FALSCH 946.684.799 NETSCAPE_ID 100103

Jede Linie steht für ein einzelnes Stück der gespeicherten Informationen. Ein Tab wird zwischen jedem der Felder eingefügt.

Von links nach rechts, hier ist das, was jedes Feld darstellt:

  • Domäne - Die Domäne, die erstellt und dass die Variable lesen kann.
  • Flag - Ein TRUE/FALSE-Wert, der angibt, ob alle Maschinen innerhalb einer bestimmten Domäne auf die Variable zugreifen können. Dieser Wert wird automatisch vom Browser festgelegt, abhängig vom Wert, den Sie für die Domäne festgelegt haben.
  • Pfad - Der Pfad innerhalb der Domäne, für den die Variable gültig ist.
  • secure - Ein TRUE/FALSE-Wert, der angibt, ob für den Zugriff auf die Variable eine sichere Verbindung mit der Domäne erforderlich ist. * Ablaufdatum - Die UNIX-Zeit, für die die Variable abläuft. Die UNIX-Zeit ist definiert als die Anzahl der Sekunden seit dem 1. Januar 1970 00:00:00 GMT.
  • name - Der Name der Variablen.
  • Wert - Der Wert der Variablen.

Aber die normale Art und Weise ist eine vollständige Sitzung zu imitieren und automatisch die Cookies aus den Antworten extrahieren.

+0

Wenn ich Cookies verwenden möchte, die von meinem Webbrowser kopieren, was soll ich tun? –

0

"Beim Empfang einer HTTP-Anfrage kann ein Server einen Set-Cookie-Header mit der Antwort senden. Der Cookie wird normalerweise vom Browser gespeichert und anschließend wird der Cookie-Wert zusammen mit jeder Anfrage an denselben Server gesendet als Inhalt eines Cookie-HTTP-Headers "extrahiert von der Mozilla-Site.

Dieser Link Please go through this wird Ihnen helfen, etwas über Header und HTTP-Anfrage zu geben. Bitte gehen Sie das durch. Dies könnte viel Ihrer Antwort beantworten.

Verwandte Themen