Asp classic 如何使用Python urlopen将参数传递到Url

Asp classic 如何使用Python urlopen将参数传递到Url,asp-classic,python-3.x,urllib,urlopen,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

我目前还不熟悉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上,记录会被保存。有什么意见吗?短暂性脑缺血发作

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

但从这一点来看:

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

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


猜猜看,您可以显示.asp页面以供进一步检查。

首先,我不懂Python

但从这一点来看:

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

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


猜猜看,您可以显示.asp页面以供进一步检查。

在Firefox中使用firebug,并在加载页面时观察网络流量。如果它实际上是一个HTTP POST(我怀疑是),请检查该POST上的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,这将起作用。

在Firefox中使用firebug,并在加载页面时观察网络流量。如果它实际上是一个HTTP POST(我怀疑是),请检查该POST上的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,这将起作用。

如果有人无意中发现了这一点,这就是我的想法:

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)

注意:请改用。;)

如果有人偶然发现了这一点,这就是我想到的:

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)

注意:请改用。;)

哦,对不起。。sentData是我的字典的名称。猜测:如果输出url在浏览器中工作,请验证浏览器是否确实比脚本做了更多的工作:可能asp服务器脚本返回的内容会在浏览器中触发更多请求,这些请求是触发服务器端数据库写入所必需的。这可以通过查看
打印(响应)
的输出并检查更多请求来检查。是的。python文件调用的asp文件调用另一个asp文件。它是这样的:我的Python文件调用Asp文件A,Asp文件A在被触发时调用Asp文件B。
print(response)
Sry的输出,我糟糕的通信:你得到的响应的输出不是
print(response)
,而是通过对它进行迭代。
urllib
的文档说,该对象的行为类似于上下文管理器,因此您可以使用urllib.request.urlopen(..)作为网页执行类似于
的操作:用于网页中的行:打印(行)
,以查看返回给您的内容。插入换行符和适当的缩进..哦,对不起。。sentData是我的字典的名称。猜测:如果输出url在浏览器中工作,请验证浏览器是否确实比脚本做了更多的工作:可能asp服务器脚本返回的内容会在浏览器中触发更多请求,这些请求是触发服务器端数据库写入所必需的。这可以通过查看
打印(响应)
的输出并检查更多请求来检查。是的。python文件调用的asp文件调用另一个asp文件。它是这样的:我的Python文件调用Asp文件A,Asp文件A在被触发时调用Asp文件B。
print(response)
Sry的输出,我糟糕的通信:你得到的响应的输出不是
print(response)
,而是通过对它进行迭代。
urllib
的文档说,该对象的行为类似于上下文管理器,因此您可以使用urllib.request.urlopen(..)作为网页执行类似于
的操作:用于网页中的行:打印(行)
,以查看返回给您的内容。插入换行符和适当的缩进。是的,你是正确的。asp文件有一个Request.Querystring(..)获取示例数据参数字符串,该字符串为“{%22mykey%22:%20[{%22idno%22:%20%22id123%22,%20%22name%22:%20%22ej%22}]}”。。顺便说一句,我相信我没有在urlopen上提供数据参数。。还是我错了?因为从我所读到的内容来看,传递数据时的结构是这样的:response=urllib.request.urlopen(full_url,data)来自您的帖子:
full_url=url+“?data=”+str(sentData).
yes,但是urllib.request.urlopen()上使用的语法只包含一个参数,即url
response=urllib.request.urlopen(完整url)
但您的
full\u url
包含数据。只需将
Request.Querystring(..)
更改为
Request(..)
,然后查看。
Request()
?ASP对
GET
不使用
Request.Querystring
,对
POST
不使用
Request.Form
?对不起,我对ASP不太熟悉。是的,你是对的。asp文件有一个Request.Querystring(..)获取示例数据参数字符串,该字符串为“{%22mykey%22:%20[{%2