2017-12-23 11 views
1

Ich bekomme 'HTTP-Fehler 405: Methode nicht zulässig' Fehler. Mein Code istPython 3: HTTP-Fehler 405: Methode nicht zulässig

import urllib.request 
import urllib.parse 

try: 
    url = 'https://www.google.com/search' 
    values = {'q': 'python programming tutorials'} 

    data = urllib.parse.urlencode(values) 
    data = data.encode('utf-8') # data should be bytes 
    headers = {} 
    headers['User-Agent'] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36" 
    req = urllib.request.Request(url, data, headers = headers) 
    resp = urllib.request.urlopen(req) 
    print("HERE") 
    respData = resp.read() 
    saveFile = open('withHeaders.txt', 'w') 
    saveFile.write(str(respData)) 
    saveFile.close() 
except Exception as e: 
    print(e) 

Der Fehler Ich denke, in req ist = urllib.request.Request (url, Daten, headers = Header). Was ist der Fehler, syntaktisch? Was sollte im Code geändert werden? Und jeder konzeptionelle Fehler korrigiert mich.


EDIT

Konzept:

def URLRequest(url, params, method="GET"): 
    if method == "POST": 
     return urllib2.Request(url, data=urllib.urlencode(params)) 
    else: 
     return urllib2.Request(url + "?" + urllib.urlencode(params)) 
+1

Der Fehler ist klar: Sie verwenden eine HTTP-Methode, die der Server nicht erwartet. Warum senden Sie eine POST-Anfrage an "https: // www.google.com/search"? – Blender

+0

es ist wahr, seine GET-Methode zu erwarten und Sie verwenden POST so richtige Methode finden –

+0

@PavanKumarTS, was ist der richtige Weg, es zu tun? Ich bin Neuling darin. –

Antwort

1

Sie können stattdessen Requests Bibliothek verwenden. Es ist viel sauberer als urllib

import requests 
q = 'Whatever you want to search' 
url = 'https://www.google.com/search' 
response = requests.get(url+'?'+'q='+q) 
saveFile = open('response.txt', 'w') 
savefile.write(response.text) 
savefile.close() 

Oder wenn Sie auf die urllib haften möchten, können Sie dies tun:

import urllib.request 
url = 'https://www.google.com/search' 
q = 'Search Query' 
headers = {'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36"} 
request = urllib.request.Request(url+'?'+'q='+q, headers=headers) 
response = urllib.request.urlopen(request).read() # the text of the response is here 
saveFile = open('withHeaders.txt', 'w') 
saveFile.write(str(response)) 
saveFile.close() 
+0

danke. Aber wie macht man das mit urllib? Ich bin neu darin. –

+0

Danke Mein Schlechter habe ich versucht, aber ich möchte GET Anfrage senden. Danke auch @Blender. –

+0

eine Änderung in Zeile 6, nur vergessen, "read()" – Alireza

0

hier in Bezug auf www.pythonforbeginners

# Importing the module 
import urllib.request 


# your search text 
text="hi google" 

# Define the url 
url = 'http://www.google.com/#q='+text 

# Add your headers 
headers = {'User-Agent' : 'Mozilla 5.10'} 

# Create the Request. 
request = urllib.request.Request(url, None, headers) 

# Getting the response 
response = urllib.request.urlopen(request) 

# Print the headers 
print (response.read()) 
+0

Was ist in Python 3? @Pavan Kumar T S –

+0

updatd Antwort für Python 3 –

+0

Dank @Pavan Kumar T S –

Verwandte Themen