Как загрузить данные из Jotform, используя python? - PullRequest
0 голосов
/ 02 августа 2020

Я собираю некоторые данные опроса из jotform , мои данные включают аудиозапись, а URL-адрес аудио в форме:

'https://www.jotform.com/widget-uploads/voiceRecorder/201374133/981221_121.wav'

Если я попытаюсь загрузить это, используя python , это дает ошибку, потому что пользователь может загрузить этот файл только в том случае, если он вошел в учетную запись Jotform. терминал.

Я проверил их официальный API , последнее обновление было 6 лет назад на этом репо.

Я пытаюсь получить доступ с помощью запросов, я пробовал это

import requests

s = requests.Session()
s.post('https://www.jotform.com/login/', data={'username': 'dummy_username', 'password': 'dummy_password'})

s.get( 'https://www.jotform.com/widget-uploads/voiceRecorder/201374133/981221_121.wav')

Но это дает <Response [404]> ошибку.

Я проверяю поле имени пользователя и пароля:

введите описание изображения здесь

Использую ли я текущее поле для имени пользователя и пароля?

Я также пытался использовать механизацию, но выдает ту же ошибку:

import mechanize

import http.cookiejar as cookielib

browser = mechanize.Browser()

cookiejar = cookielib.LWPCookieJar() 
browser.set_cookiejar( cookiejar ) 


browser.open('https://www.jotform.com/login/')
browser.select_form(nr = 0)

browser.form['username'] = 'dummy_username'
browser.form['password'] = 'dummy_password'
result = browser.submit()
browser.retrieve('https://www.jotform.com/widget-uploads/voiceRecorder/201374133/981221_121.wav')

Как я можно ли скачивать аудиофайлы с помощью модуля запросов?

1 Ответ

0 голосов
/ 03 августа 2020

На самом деле вы неправильно используете данные формы. name элемента input используется для его идентификации. В вашем случае это loPassword и loUsername. Итак, что вам нужно сделать, это:

import requests 
sess = requests.Session()

payload = {
    'loPassword': 'dummy_password',
    'loUsername`' : 'dummy_username',
}
op = sess.post('https://www.jotform.com/login/',data=payload)

op.status_code

EDIT: я также вижу токен csrf на веб-сайте. Вам нужно сначала очистить веб-сайт для csrftoken, а затем использовать его в своем payload.

from bs4 import BeautifulSoup
import requests
page = requests.get('https://www.jotform.com/login/')
soup = BeautifulSoup(page.text,'lxml') 
csrf = soup.find('input',{'name':'csrf-token'})['value']
#now create the payload with this csrftoken
payload = {
    'csrf-token':csrf,
    'loUsername':'dummy_username',
    'loPassword':'dummy_password',
}
sess = requests.Session()
op = sess.post('https://www.jotform.com/login/',data=payload)
op.status_code
...