我是Web请求的新手。我看到了一段执行HTML PDF转换的代码:
headers = {'content-type': 'text/html', 'accept': 'application/pdf'}
urllib2.Request(url, data=html, headers=headers) # html is a string and it works fine
url执行pdf转换,它需要html作为输入。
为什么'数据'关键字参数如此重要?为什么不能成为另一个参数呢?
我原以为urllib2.Request(url, params = {'data': html})
数据只是其中一个关键值对。服务器会相应地进行处理。
为什么我们需要'数据'作为与其他参数分开的东西?
是否因为我们指定了内容类型'在标题中,它作为约定绑定到data关键字?
我正在编写一个API,使得所有内容都像请求关键字一样被请求,用于简单的库目的。所以我想知道何时需要数据以及何时不是这样。我确实理解params但是数据'是强制性的,还是仅针对发送到服务器的特定内容类型的帖子请求?如果我现在有多种内容类型怎么办?
答案 0 :(得分:1)
提供数据属性后,请求将作为POST发送。它不是强制性的,它可以是None,如果它是none(或未提供),它将作为GET发送。这一切都在这里描述:http://docs.python.org/2/library/urllib2.html#urllib2.Request
请求是否也有相同的约定?我这样问,因为在 请求我们有request.get。所以request.get(url,data = something) 会转换为POST吗?如何在服务器上看到这些数据 任何想法?
request.get(url, data="test")
将作为GET请求发送,其中“test”作为请求的正文。这是原始HTTP请求:
GET /headers HTTP/1.1\r\nHost: httpbin.org\r\nContent-Length: 4\r\nAccept-Encoding: gzip, deflate, compress\r\nAccept: */*\r\nUser-Agent: python-requests/2.2.1 CPython/2.7.5 Windows/7\r\n\r\ntest
格式化:
GET /headers HTTP/1.1
Host: httpbin.org
Content-Length: 4
Accept-Encoding: gzip, deflate, compress
Accept: */*
User-Agent: python-requests/2.2.1 CPython/2.7.5 Windows/7
test
在大多数情况下,服务器会忽略它。