MissingSchema-带有请求模块的无效URL错误

时间:2019-04-24 13:37:17

标签: python-3.x python-requests urllib

尝试使用GetItem从eBay API获取数据。但是请求没有正确读取或获取URL,有什么想法吗?出现此错误:

requests.exceptions.MissingSchema: Invalid URL '<urllib.request.Request object at 0x00E86210>': No schema supplied. Perhaps you meant http://<urllib.request.Request object at 0x00E86210>?

我发誓我以前曾经有过这段代码,但是现在还没有,所以我不确定为什么。

我的代码:

from urllib import request as urllib
import requests

url = 'https://api.ebay.com/ws/api.dll'

data = '''<?xml version="1.0" encoding="utf-8"?>
<GetItemRequest xmlns="urn:ebay:apis:eBLBaseComponents">
<RequesterCredentials>
<eBayAuthToken>my-auth-token</eBayAuthToken>
</RequesterCredentials>
<ItemID>any-item-id</ItemID>
</GetItemRequest>'''

headers = {
    'Content-Type' : 'text/xml',
    'X-EBAY-API-COMPATIBILITY-LEVEL' : 719,
    'X-EBAY-API-DEV-NAME' : 'dev-name',
    'X-EBAY-API-APP-NAME' : 'app-name',
    'X-EBAY-API-CERT-NAME' : 'cert-name',
    'X-EBAY-API-SITEID' : 3,
    'X-EBAY-API-CALL-NAME' : 'GetItem',
}

req = urllib.Request(url, data, headers)
resp = requests.get(req)
content = resp.read()

print(content)

先谢谢您。 urllib的任何优秀阅读材料也将很棒。

1 个答案:

答案 0 :(得分:0)

您正在混合使用urllib和请求库。它们是不同的库,都可以在Python中执行HTTP请求。我建议您只使用请求库。

删除req = urllib.Request(url, data, headers)行,并将resp = ...行替换为:

r = requests.post(url, data=data, headers=headers)

像这样打印响应正文:

print(r.text)

在此处查看“请求快速入门”以获取更多示例:https://2.python-requests.org//en/master/user/quickstart/