如何使用Python urlopen将参数传递给Url

时间:2012-11-08 12:14:43

标签: asp-classic python-3.x urllib urlopen

我目前刚接触python编程。我的问题是我的python程序似乎没有正确地将参数传递/编码到我创建的ASP文件中。这是我的示例代码:

import urllib.request

url = 'http://www.sample.com/myASP.asp'
full_url = url + "?data='" + str(sentData).replace("'", '"').replace(" ", "%20").replace('"', "%22") + "'"
print (full_url)
response = urllib.request.urlopen(full_url)
print(response)

输出会给我一些类似的东西:

http://www.sample.com/myASP.asp?data='{%22mykey%22:%20[{%22idno%22:%20%22id123%22,%20%22name%22:%20%22ej%22}]}'

asp文件假设将获取的查询字符串插入数据库..但每当我检查数据库时,都不会保存任何记录。虽然如果我将打印输出复制并粘贴到我的浏览器URL上,则会保存记录。有什么输入吗? TIA

更新: 是否有可能python调用我的ASP文件A,但它不会调用我的ASP文件B? ASP文件A由python调用,而ASP文件B由ASP文件A调用。因为每当我在浏览器上运行url时,保存都很顺利。但是在python中,即使从Python文件A读取从python传递的数据,也不会保存数据库。

3 个答案:

答案 0 :(得分:3)

在Firefox中使用firebug并在加载页面时观察网络流量。如果它实际上是HTTP POST,我怀疑它是,请检查该帖子上的帖子参数并执行以下操作:

from BeautifulSoup import BeautifulSoup
import urllib

post_params = {
              'param1' : 'val1',
              'param2' : 'val2',
              'param3' : 'val3'
              }
post_args = urllib.urlencode(post_params)

url = 'http://www.sample.com/myASP.asp'
fp = urllib.urlopen(url, post_args)
soup = BeautifulSoup(fp)

如果它实际上是HTTP POST,这将有效。

答案 1 :(得分:1)

如果有人偶然发现这件事,我就会提出这个问题:

py文件:

url = "my.url.com"
data = {'sample': 'data'}

encodeddata = urllib.parse.urlencode(data).encode('UTF-8')
req = urllib.request.Request(url, encodeddata)
response = urllib.request.urlopen(req)

在我的asp文件中,我使用了json2.js:

jsondata = request.form("data")
jsondata = replace(jsondata,"'","""")
SET jsondata = JSON.parse(jsontimecard)

注意:请改用requests。 ;)

答案 2 :(得分:0)

首先,我不懂Python。

但是从这个:doc on urllib.request

  

数据时,HTTP请求将是POST而不是GET   参数提供

让我做一个非常疯狂的猜测,你在asp页面中访问表单值Request.Querystring(..),所以你的帖子不会传递任何值。但是当您将网址粘贴到地址栏中时,它是GET并且可以正常工作。

猜猜,你可以显示.asp页面进行进一步检查。