什么是数据'在python' urrlib2.Request?

时间:2014-08-09 11:52:24

标签: python request

我是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但是数据'是强制性的,还是仅针对发送到服务器的特定内容类型的帖子请求?如果我现在有多种内容类型怎么办?

1 个答案:

答案 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

在大多数情况下,服务器会忽略它。