各个协议层的网络请求

应用层的网络请求
用Requests库,来访问

#使用requests库来访问
import requests
def query(name):
    url="http://api.apiopen.top/searchPoetry"
    parameters={'name':name}
    request=requests.get(url,params=parameters)
    content=request.json()
    print(name)
    print(content['result'][0]['content'])
query('杜甫')

运行结果:

杜甫
万里飘零独此身,诗魂终恋浣花村。|宁贫宁冻宁饥死,一饭何曾忘至尊。

直接用HTTP协议来访问

import http.client
import json
from urllib.parse import quote
base='/searchPoetry'
def query(name):
    path='{}?name={}'.format(base,quote(name))
    conn=http.client.HTTPConnection('api.apiopen.top')
    conn.request('GET',path)
    rawreply=conn.getresponse().read()
    reply=json.loads(rawreply.decode('utf-8'))
    print(name)
    print(reply['result'][0]['content'])
query('李白')

这个程序比上一个程序更基础一些。
运行结果:

李白
风骨神仙籍里人,诗狂酒圣且平生。|开元一遇成何事,留得千秋万古名。

用python的网络协议栈的最低层socket实现

import socket
from urllib.parse import quote
request_text="""
GET /searchPoetry?name{} HTTP/1.1\r\n\
Host: api.apiopen.top:80\r\n\
User-Agent: search.py(Foundations of Python Network Programming)\r\n\
Connection: close\r\n\
\r\n\
"""
def search(name):
    sock = socket.socket()
    sock.connect(('api.apiopen.top', 80))
    request=request_text.format(quote(name))
    sock.sendall(request.encode('utf-8'))
    raw_reply=b''
    while True:
        more=sock.recv(1024)
        if not more:
            break
        raw_reply+=more
    print(raw_reply.decode('utf-8'))
search('杜甫')

运行结果:


HTTP/1.1 200 
Server: nginx
Date: Thu, 18 Oct 2018 08:36:27 GMT
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Connection: close

2c
{"code":200,"message":"成功!","result":[]}
0

不知为什么result为空,不知有哪位大佬可以解决下。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值