Как передать параметр в 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 для дальнейшей проверки.