python 学习笔记15-----web编程

一、3个常用的web模块,urlparse、urllib、urllib2

urlparse最常用的函数就是urlparse,给定url,将url分割成各个不用部分,如下所示。

>>> urlparse.urlparse("http://v.ml.streamocean.com/live/JSTV-HZ-BAK?fmt=x264_400K_flv")
ParseResult(scheme='http', netloc='v.ml.streamocean.com', path='/live/JSTV-HZ-BAK', params='', query='fmt=x264_400K_flv', fragment='')

urllib

urlopen()

二、urllib2用例

这里给出了一个发起post和get的http client,并给出wireshark抓包内容。

import urlparse
import urllib
import json
import urllib2

def post_count(values):  
    url = "http://172.16.1.212:8800/api/payment_info"
    req = urllib2.Request(url, json.dumps(values)) 
    res = urllib2.urlopen(req)
    ret_code = res.code
    html_body   = res.read()
    print("post: %s", values)
    print("ret_code: %d, %s", ret_code, html_body)   


def get_count():
    req = urllib2.Request("http://172.16.1.212:8800/api/payment_info")
    req.add_header("User-Agent", "Test")
    res = urllib2.urlopen(req)
    content = res.read()
    account_list = json.loads(content)
    print account_list


values = {
          "ver":"1",
          "vendor":"7PO",
          "pkg_id":"2"
}
post_count(values)  
get_count()
抓包查看get和post http消息头如下:
GET /api/payment_info HTTP/1.1
Accept-Encoding: identity
Host: 172.16.1.212:8800
Connection: close
User-Agent: Test



POST /api/payment_info HTTP/1.1
Accept-Encoding: identity
Content-Length: 44
Host: 172.16.1.212:8800
Content-Type: application/x-www-form-urlencoded
Connection: close
User-Agent: Python-urllib/2.7

{"pkg_id": "2", "vendor": "7PO", "ver": "1"}

  1. Request的第二个参数,如果为空,则为get请求,如果不为空,则为post请求,同时,第二个参数将是需要post的内容;
  2. 注意上面例子是通过json将字典整合,得到的post内容为{"pkg_id": "2", "vendor": "7PO", "ver": "1"}。网上还有种方法是urllib.urlencode(values),其得到的内容为-----pkg_id=2&vendor=7PO&ver=1,显然前者更常用些;
  3. 如果要上传内容,post请求,是常用的方法,当然,通过get请求,将需要上报的内容放到url中,也是可以的。

一个简单的http server和http client

#!/usr/bin/env python

from os import curdir, sep
from BaseHTTPServer import \
    BaseHTTPRequestHandler, HTTPServer

class MyHandler(BaseHTTPRequestHandler):

    def do_GET(self):
        try:
            f = open(curdir + sep + self.path)
            self.send_response(200)
            self.send_header('Content-type',
		'text/html')
            self.end_headers()
            self.wfile.write(f.read())
            f.close()
        except IOError:
            self.send_error(404,
		'File Not Found: %s' % self.path)

def main():
    try:
        server = HTTPServer(('', 80), MyHandler)
        print 'Welcome to the machine...'
	print 'Press ^C once or twice to quit'
        server.serve_forever()
    except KeyboardInterrupt:
        print '^C received, shutting down server'
        server.socket.close()

if __name__ == '__main__':
    main()
import urlparse
import urllib
import json
import urllib2
def get_count():
    req = urllib2.Request("http://172.16.1.212:8888/friends.htm")
    req.add_header("User-Agent", "Test")
    res = urllib2.urlopen(req)
    content = res.read()
    #account_list = json.loads(content)
    print content
get_count()

<HTML><HEAD><TITLE>
Friends CGI Demo (static screen)
</TITLE></HEAD>
<BODY><H3>Friends list for: <I>NEW USER</I></H3>
<FORM ACTION="/cgi-bin/friends1.py">
<B>Enter your Name:</B>
<INPUT TYPE=text NAME=person VALUE="NEW USER" SIZE=15>
<P><B>How many friends do you have?</B>
<INPUT TYPE=radio NAME=howmany VALUE="0" CHECKED> 0
<INPUT TYPE=radio NAME=howmany VALUE="10"> 10
<INPUT TYPE=radio NAME=howmany VALUE="25"> 25
<INPUT TYPE=radio NAME=howmany VALUE="50"> 50
<INPUT TYPE=radio NAME=howmany VALUE="100"> 100
<P><INPUT TYPE=submit></FORM></BODY></HTML>

抓包内容:

GET /friends.htm HTTP/1.1
Accept-Encoding: identity
Host: 172.16.1.212:8888
Connection: close
User-Agent: Test

HTTP/1.0 200 OK
Server: BaseHTTP/0.3 Python/2.6.8
Date: Fri, 21 Feb 2014 08:21:28 GMT
Content-type: text/html

<HTML><HEAD><TITLE>
Friends CGI Demo (static screen)
</TITLE></HEAD>
<BODY><H3>Friends list for: <I>NEW USER</I></H3>
<FORM ACTION="/cgi-bin/friends1.py">
<B>Enter your Name:</B>
<INPUT TYPE=text NAME=person VALUE="NEW USER" SIZE=15>
<P><B>How many friends do you have?</B>
<INPUT TYPE=radio NAME=howmany VALUE="0" CHECKED> 0
<INPUT TYPE=radio NAME=howmany VALUE="10"> 10
<INPUT TYPE=radio NAME=howmany VALUE="25"> 25
<INPUT TYPE=radio NAME=howmany VALUE="50"> 50
<INPUT TYPE=radio NAME=howmany VALUE="100"> 100
<P><INPUT TYPE=submit></FORM></BODY></HTML>

当然也可以通过浏览器来查看,直接查看http://172.16.1.212:8888/friends.htm,可以看到html页面。





你可能感兴趣的:(python 学习笔记15-----web编程)