Как передать параметр в Url с помощью Python 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 своего браузера, запись будет сохранена. Любой вклад в это? ТИА

Обновление: возможно ли, что python вызывает мой ASP-файл A, но не вызывает мой ASP-файл B? ASP-файл A вызывается python, а ASP-файл B вызывается ASP-файлом A. Потому что, когда я запускаю URL в браузере, сохранение происходит хорошо. Но в python сохранение базы данных не происходит, даже если данные, передаваемые из python, считываются ASP-файлом A..

3 ответа

Решение

В случае, если кто-то наткнется на это, вот что я придумал:

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)

Примечание: используйте запросы вместо.;)

Используйте Firebug с Firefox и наблюдайте за сетевым трафиком при загрузке страницы. Если это на самом деле 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, это будет работать.

Во-первых, я не знаю Python.

Но из этого: doc на urllib.request

HTTP-запрос будет POST вместо GET, если указан параметр data

Позвольте мне сделать действительно дикое предположение, вы получаете доступ к значениям формы как Request.Querystring(..) на странице asp, так что ваше сообщение не будет передавать никаких значений. Но когда вы вставляете URL в адресную строку, это GET и это работает.

просто угадайте, вы можете показать страницу.asp для дальнейшей проверки.

Другие вопросы по тегам