python 抓包 上传 文件_Python:上传文件后抓取数据

我正在尝试根据提取到文件的文件来提取网站的响应。网站具有以下形式。

quality:

category:

debug:

image:

我要做的是上传文件,提交表单并提取响应。

我先看一个例子,我认为我成功地完成了上传工作。因为当我执行此操作时,我没有收到任何错误。

import urllib2_file

import urllib2

import request

import lxml.html as lh

data = {'name': 'image',

'file': open('/user/mydir/21T03NAPE7L._AA75_.jpg')

}

urllib2.urlopen('http://localhost/imgdigestertest.html', data)

不幸的是,我没有在这里提出要求以得到答复。我不确定如何应对。获得响应后,我应该能够以某种我很满意的模式匹配来提取数据。

根据提供的答案,尝试了以下代码:

import requests

url = 'http://somesite.com:61235/imgdigest'

files = {'file': ('21e1LOPiuyL._SL160_AA115_.jpg',

open('/usr/local/21e1LOPiuyL._SL160_AA115_.jpg', 'rb'))}

other_fields = {"quality": "2",

"category": "1",

"debug": "0"

}

headers={'content-type': 'text/html; charset=ISO-8859-1'}

response = requests.post(url, data=other_fields, files=files, headers=headers)

print response.text

现在,我得到以下错误:这告诉我某些图像文件无法正确附加。我们必须指定文件类型吗?

Image::Image(...): bufSize = 0. Can not load image data. Image size = 0. DigestServiceProvider.hpp::Handle(...) |

解决方案

使用请求库(pip install requests如果使用pip,则为)。

要将其自定义为您的外观,请执行以下操作:

import requests

url = 'http://localhost:8080/test_meth'

files = {'file': ('21T03NAPE7L._AA75_.jpg',

open('./text.data', 'rb'))}

other_fields = {"quality": "2",

"category": "1",

"debug": "1"

}

response = requests.post(url, data=other_fields, files=files)

print response.text

在我的本地系统上,text.data包含以下内容:

Data in a test file.

我用cherrypy(pip install cherrypy)编写了一个server.py来测试我在上面给出的客户端。这是server.py的源代码:

import cherrypy

class Hello(object):

def test_meth(self, category, debug, quality, file):

print "Form values:", category, debug, quality

print "File name:", file.filename

print "File data:", file.file.read()

return "More stuff."

test_meth.exposed = True

cherrypy.quickstart(Hello())

当我运行上面的client.py时,它会打印:

More stuff.

您可以在server.py示例中看到返回的内容。

同时,服务器说:

Form values: 1 1 2

File name: 21T03NAPE7L._AA75_.jpg

File data: Data in a test file.

127.0.0.1 - - [14/Jul/2012:00:00:35] "POST /test_meth HTTP/1.1" 200 11 "" "python-requests/0.13.3 CPython/2.7.3 Linux/3.2.0-26-generic"

因此,您可以看到客户端正在按代码中所述发布文件名,并指定本地文件的文件内容。

有一点要指出,在本文开头,我说过要使用请求库。请勿将其与原始问题中要导入的urllib请求混淆。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值