Webscraping страницу входа, которая создает с Jquery динамическую форму в форме отправки - PullRequest
0 голосов
/ 26 октября 2018

Я должен попытаться создать этот URL-адрес Страница входа в супермаркет

Я вижу только с помощью отладчика Chrome, когда ввожу своего пользователя (действительный адрес электронной почты пользователя) и пароль с ошибкой....

Я вижу, что эта страница вызывает такой вызов:

Request URL: https://accounts.eu1.gigya.com/accounts.login?context=R1521042408&&saveResponseID=R1521042408
Request Method: POST

loginID: [my real email for testing]
password: [any word except my real password, to get ERROR p.e. Helloooo]
sessionExpiration: -1
targetEnv: jssdk
include: profile,data,emails,subscriptions,preferences,
includeUserInfo: true
loginMode: standard
lang: es
APIKey: 3_Ns3U5-wXeiSQL-vZtu1Fd2DpWBsEdB78mYs2dn0_kyFFwwSJAZZd1EHUm9kodfND
source: showScreenSet
sdk: js_latest
authMode: cookie
pageURL: https://www.carrefour.es/access?pagesitename=supermercado&redirect=https%3A%2F%2Fwww.carrefour.es%2Fsupermercado%2F%3FDPSLogout%3Dtrue&back=https%3A%2F%2Fwww.carrefour.es%2Fsupermercado%2F%3FDPSLogout%3Dtrue
format: jsonp
callback: gigya.callback
context: R1521042408
utf8: ✓

Я пытался создать скрипт php с помощью cURL для вызова этого URL: https://accounts.eu1.gigya.com/accounts.login?context=something&&saveResponseID=something

и параметры POST .... но у меня проблема ... эта страница внутренне использует API для генерации контекстов с таким результатом:

обратный вызов: контекст gigya.callback: R1642825906

кто-то может объяснить мне, пожалуйста, как работают эти страницы, потому что я не знаю, как создать этот contextID для вызова учетной записи с этим URI: https://accounts.eu1.gigya.com/accounts.login?context=something&&saveResponseID=something

Пожалуйста, помогите мне!Мне нужно попытаться понять, как работает эта страница.Спасибо!

Ани

1 Ответ

0 голосов
/ 27 октября 2018

Ключ API, используемый при входе в систему POST, жестко закодирован в файле config.js, поэтому вы можете получить его с помощью Regex, например:

curl -s "https://www.carrefour.es/nlogin/resources/config.js?v=v1.0.24" | sed -rn 's/\s+val:\s+\x27(.*)\x27,.*/\1/p'

Но это не очень хорошо, вам будет лучше савтоматизированный инструмент браузера, такой как

Существует еще 2 API для вызова логина:

saveResponseID представляется своего рода идентификатором сеанса, хранящимся на сервере

Сценарий, использующий & :

USERNAME="your.email@gmail.com"
PASSWORD="test"
CONTEXT=responseId

API_KEY=$(curl -s "https://www.carrefour.es/nlogin/resources/config.js?v=v1.0.24" | sed -rn 's/\s+val:\s+\x27(.*)\x27,.*/\1/p')

curl "https://accounts.eu1.gigya.com/accounts.login?saveResponseID=$CONTEXT" \
     --data-urlencode "loginID=$USERNAME" \
     --data-urlencode "APIKey=$API_KEY" \
     --data-urlencode "password=$PASSWORD" \
     -c cookie.txt

curl "https://accounts.eu1.gigya.com/socialize.getSavedResponse?APIKey=$API_KEY&saveResponseID=$CONTEXT" -b cookie.txt

Обратите внимание, что последнему API (тому, который получил ответ) нужен файл cookie, сгенерированный /accounts.login API

Этот saveResponseID (контекст), кажется, имеет время жизни около 2 минут.более менее.В вашем случае, если вы использовали то же самое только в socialize.getSavedResponse, не вызывая accounts.login, перед этим могут быть объяснены некоторые ошибки запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...