V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
jiyinyiyong
V2EX  ›  Python

Python 的一个 library "Requests" 是怎样发挥作用的?

  •  
  •   jiyinyiyong ·
    jiyinyiyong · 2011-10-19 22:00:47 +08:00 · 5140 次点击
    这是一个创建于 4790 天前的主题,其中的信息可能已经有所发展或是发生改变。
    http://docs.python-requests.org/en/latest/index.html
    初学 python 和 flask, 对 http 协议方面了解不是很多,
    GET/POST 不是从浏览器发出向服务器请求的吗, Python 用来完成什么?
    新手, :) 求各位指点,,
    14 条回复    1970-01-01 08:00:00 +08:00
    binux
        1
    binux  
       2011-10-19 22:19:49 +08:00
    完成浏览器所完成的工作,比如在python中获取百度首页的内容。
    jiyinyiyong
        2
    jiyinyiyong  
    OP
       2011-10-19 22:45:31 +08:00
    获取页面内容..我在网上看到博客讲, 所以开始关心这个框架的:
    http://gun.io/blog/python-for-the-web/
    搞不清楚整块, 这个是小部分吧.
    keakon
        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等。
    这些解析完后要传给你的脚本,你的脚本按照逻辑处理这个请求,并输出响应。
    est
        4
    est  
       2011-10-20 01:16:50 +08:00
    Requests只是一个改良的接口而已。接口的实现还是靠下面一层。
    Weakdancer
        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程序而已。
    Weakdancer
        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**
    Weakdancer
        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 只是起了一个名字的作用
    jiyinyiyong
        8
    jiyinyiyong  
    OP
       2011-10-20 10:54:59 +08:00
    @Weakdancer , 感谢回答, 好像我没问到重点.
    我看了那片博客上介绍 request.get() 的用法例子, 才疑问的,
    因为之前我理解是浏览器用 js 发起 get/post 请求的,
    差不多我理解只有下面 ajax 的内容吧,
    http://www.w3school.com.cn/ajax/ajax_xmlhttprequest_send.asp
    但是 Python 是在服务器上执行的呀, 服务器上再用 get 是做什么?
    keakon
        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
    ...
    reorx
        10
    reorx  
       2011-10-20 12:21:24 +08:00
    @jiyinyiyong 发出GET请求的服务器,相对于请求接受方,比如"www.baidu.com",就是客户端了。

    按照你的思路,把它当成没有界面的浏览器吧。这其实就是反向代理的基本工作原理————服务器作为中转,发出请求,获取返回,再发送给最下级客户端。
    Weakdancer
        11
    Weakdancer  
       2011-10-20 13:07:56 +08:00
    这个模块用了一个容易引起歧义的名字而已,它不是常见的request的GET获取,而是对urllib的封装,是客户端
    Weakdancer
        12
    Weakdancer  
       2011-10-20 13:09:34 +08:00
    这个不是服务器的代码。

    python不是只可以做服务器。
    Weakdancer
        13
    Weakdancer  
       2011-10-20 13:11:08 +08:00
    另外,它并不是标准库,你完全可以做个叫printA 的模块,用来输出B的
    jiyinyiyong
        14
    jiyinyiyong  
    OP
       2011-10-20 13:26:12 +08:00
    原来也是做客户端啊, 大概理解了.
    那在服务器上怎么做来对付 GET 请求呢?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2905 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 02:40 · PVG 10:40 · LAX 18:40 · JFK 21:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.