1
binux 2011-10-19 22:19:49 +08:00
完成浏览器所完成的工作,比如在python中获取百度首页的内容。
|
2
jiyinyiyong OP |
3
keakon 2011-10-19 23:22:12 +08:00
@jiyinyiyong 用来解析请求和生成响应的…
比如你访问 http://xxx.com/abc?x=123,你得知道协议是http,域名是xxx.com,路径是/abc,请求字符串是x=123,方法是GET,可能带了哪些cookie等。 这些解析完后要传给你的脚本,你的脚本按照逻辑处理这个请求,并输出响应。 |
4
est 2011-10-20 01:16:50 +08:00
Requests只是一个改良的接口而已。接口的实现还是靠下面一层。
|
5
Weakdancer 2011-10-20 03:54:51 +08:00
比如 你键入 http://baidu.com/?s=something
> GET/POST 不是从浏览器发出向服务器请求的吗 本质是和服务器建立TCP连接。 然后发送文本: GET /?s=something HTTP 1.1 Host : baidu.com User agent :“你的浏览器版本信息” 有cookie的话再会有个 Cookie :“xxx” 除此之外就什么都没有了 这一切是透明的,没有什么其他的额外操作,它就是这样工作的,发送的只是普通的数据,而不是一个什么专用的东西。 框架就得到这些数据 然后帮你解析 而且,开发过程中服务器端除了python程序之外并没有什么其他程序在干什么事,就是一个独立的python程序而已。 |
6
Weakdancer 2011-10-20 04:00:27 +08:00
https://github.com/kennethreitz/requests/blob/master/requests/api.py#L96
这是源码,这么一堆复杂的东西,就是为了把那几行对计算机友好的数据转换成让人类方便获取的一些方法的。 Requests: HTTP for **Humans** |
7
Weakdancer 2011-10-20 04:09:23 +08:00
看到 @keakon 的解释后,我竟然没有仔细读代码。
非常不好意思。 我和@keakon 都把这个 request 理解成 常见的请求(名词)了 实际上是个动词 在这里request是个包名 https://github.com/kennethreitz/requests/tree/master/requests request.get 就是里边的 get.py 具体参见 http://docs.python.org/tutorial/modules.html Ctrl - F package 是一种代码管理方式 request 只是起了一个名字的作用 |
8
jiyinyiyong OP @Weakdancer , 感谢回答, 好像我没问到重点.
我看了那片博客上介绍 request.get() 的用法例子, 才疑问的, 因为之前我理解是浏览器用 js 发起 get/post 请求的, 差不多我理解只有下面 ajax 的内容吧, http://www.w3school.com.cn/ajax/ajax_xmlhttprequest_send.asp 但是 Python 是在服务器上执行的呀, 服务器上再用 get 是做什么? |
9
keakon 2011-10-20 12:05:46 +08:00
@jiyinyiyong 囧,你看看描述吧,相当于urllib2的作用
>>> r = requests.get('https://api.github.com', auth=('user', 'pass')) >>> r.status_code 204 >>> r.headers['content-type'] 'application/json' >>> r.content ... |
10
reorx 2011-10-20 12:21:24 +08:00
@jiyinyiyong 发出GET请求的服务器,相对于请求接受方,比如"www.baidu.com",就是客户端了。
按照你的思路,把它当成没有界面的浏览器吧。这其实就是反向代理的基本工作原理————服务器作为中转,发出请求,获取返回,再发送给最下级客户端。 |
11
Weakdancer 2011-10-20 13:07:56 +08:00
这个模块用了一个容易引起歧义的名字而已,它不是常见的request的GET获取,而是对urllib的封装,是客户端
|
12
Weakdancer 2011-10-20 13:09:34 +08:00
这个不是服务器的代码。
python不是只可以做服务器。 |
13
Weakdancer 2011-10-20 13:11:08 +08:00
另外,它并不是标准库,你完全可以做个叫printA 的模块,用来输出B的
|
14
jiyinyiyong OP 原来也是做客户端啊, 大概理解了.
那在服务器上怎么做来对付 GET 请求呢? |