问题是执行urllib.request.urlopen(request)时候,收到 urllib.error.HTTPError: HTTP Error 400:
这是报错的信息
这是header的信息
这是dataload的信息
这是python的create request程序,感觉应该是什么数据不对,但是检查过它和header的信息是一致的。
def create_request():
url = 'https://ppubs.uspto.gov/dirsearch-public/searches/generic'
data = {
'cursorMarker':'AoJwwOOcgokDOjgxNzUwNDE5IVBHLVVTLTIwMjMwMjA2OTEz',
'databaseFilters':'[{"databaseName": "USPAT"},{"databaseName": "US-PGPUB"},{"databaseName": "USOCR"}]',
'fields':'["documentId","patentNumber","title","datePublished","inventors","pageCount"]',
'op':'AND',
'pageSize':'50',
'q':'toy AND car',
'searchType':'0',
'sort':'date_publ desc',
}
#for POST request, need to encode
data = urllib.parse.urlencode(data).encode('utf-8')
headers = {
'Authority': 'ppubs.uspto.gov',
'Method': 'POST',
'Path': '/dirsearch-public/searches/generic',
'Scheme': 'https',
'Accept': 'application/json',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
'Content-Length': '334',
'Content-Type': 'application/json',
'Origin': 'https://ppubs.uspto.gov',
'Referer': 'https://ppubs.uspto.gov/pubwebapp/static/pages/ppubsbasic.html',
'Sec-Ch-Ua': '"Not.A/Brand";v="8", "Chromium";v="114", "Microsoft Edge";v="114"',
'Sec-Ch-Ua-Mobile': '?0',
'Sec-Ch-Ua-Platform': '"Windows"',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-origin',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.79',
}
#for POST request, need to input data
request = urllib.request.Request(url=url, headers=headers, data=data)
return request
cv您的url——https://ppubs.uspto.gov/dirsearch-public/searches/generic
填入浏览器地址栏回车,返回了405异常。
405
405是HTTP协议中的一种错误状态码。它表示客户端向服务器发送了一种不被支持的请求方法,导致服务器无法处理该请求,并返回了该状态码。
您的400报错码
400 Bad Request:表示客户端发出的请求存在语法错误
请检查您的url是否存在拼写错误,代码语法是否存在不妥的地方。
data参数是可选的,并且是字节流编码格式(可以用urllib.parse.urlencode()和bytes()方法将参数转化为字节流编码格式的内容)。如果要使用data参数,则请求方式为POST。
import urllib.parse
import urllib.request
data = bytes(urllib.parse.urlencode({'word': 'hello'}), encoding='utf8')
response = urllib.request.urlopen('http://httpbin.org/post', data=data)
print(response.read().decode('utf8'))
要处理Python urllib请求的HTTP错误,可以使用try-except来捕捉HTTPError错误,然后进行相应的处理。以下是一种解决方案:
import urllib
from urllib import request
url = 'http://example.com' # 设置要发送请求的URL
headers = {'User-Agent': 'Mozilla/5.0'} # 设置请求头信息
try:
req = request.Request(url, headers=headers)
response = request.urlopen(req)
# 处理正常逻辑
print(response.read().decode('utf-8'))
except urllib.error.HTTPError as e:
# 处理HTTP错误
print(e.code, e.reason)
在上述代码中,我们通过设置请求头信息,创建一个Request对象,并使用urlopen发送HTTP请求。如果出现HTTP错误,会抛出urllib.error.HTTPError异常,我们可以通过捕捉该异常来处理错误情况。在异常处理的代码块中,可以根据具体的需求,决定如何处理HTTP错误。
在这个例子中,我们简单地打印了错误的状态码和原因。你也可以根据实际情况,采取其他处理方式,如重试请求、记录错误日志等。
这是一种处理HTTP错误的常见方法,但具体的处理方式取决于你对错误情况的处理需求。