python请求服务器时如何隐藏User-Agent

本文结合上一篇文章“python利用有道翻译实现“语言翻译器”的功能”的实现代码,对其进行加工,实现请求服务器时隐藏User-Agent。

python实现隐藏User-Agent的一般做法有两种:

(1)在request对象生成之前(下面例子中的req),通过一个字典类型的head,将其作为参数传入urllib.request.Request(url, data, head)中;

(2)在request对象生成之后(下面例子中的req),通过add_header()方法来实现。

import urllib.request
import urllib.parse
import json

while True:
    content = input('请输入需要翻译的内容(退出输入Q):')
    if content == 'Q':
        break
    else:
        url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=http://www.youdao.com/'

        #head = {}
        #head['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36'
        
        data = {}
        data['type'] = 'AUTO'
        data['i'] = content
        data['doctype'] = 'json'
        data['xmlVersion'] = '1.8'
        data['keyfrom'] = 'fanyi.web'
        data['ue'] = 'UTF-8'
        data['action'] = 'FY_BY_CLICKBUTTON'
        data['typoResult'] = 'true'
        data = urllib.parse.urlencode(data).encode('utf-8')
        
        #req = urllib.request.Request(url, data, head)
        req = urllib.request.Request(url, data)
        req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.31')
        
        response = urllib.request.urlopen(req)
        html = response.read().decode('utf-8')
        target = json.loads(html)
        print('翻译的结果:%s' % target['translateResult'][0][0]['tgt'])
>>> 
请输入需要翻译的内容(退出输入Q):查尔顿
翻译的结果:charlton
请输入需要翻译的内容(退出输入Q):Q
>>> req.headers
{'User-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.31'}
>>> 

我们可以通过req.headers来检验User-Agent是否隐藏成功!

注:上述被注释的代码行是第一种方法的实现。

posted @ 2016-02-01 21:27  翌逍  阅读(2356)  评论(0编辑  收藏  举报