Почтовый запрос не работает в Scrapy. Работает в Почтальоне. Где я не прав?

1

Я использую scrapy.FormRequest.from_response для публикации. Я получаю сквозную информацию и все данные на месте, но не получаю таблицу, которую я ожидаю. Изображение 174551 Вот моя полезная нагрузка

{
  'captcha': '680336',
  'districtCode': '714',
  'sroVal': 'TADIKONDA(714)',
  'selectedSroId': 'null',
  'sroId': '7',
  'path': '/APCARDECClient',
  'regyear': '2018',
  'docSel': '1',
  'doct': '861'
}

И заголовки, которые я использовал для отправки запроса.

{
  'origin': 'http://registration.ap.gov.in',
  'accept-language': 'en-US,en;q=0.9,ru;q=0.8,uk;q=0.7',
  'accept-encoding': 'gzip, deflate',
  'accept': 'text/html,application/xh tml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
  'upgrade-insecure-requests': '1',
  'referer': 'http://registration.ap.gov.in/APCARDECClient/ecSearchByDocAu to.jsp?distcode=&distname=&srocode=&sroname=',
  'user-agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',
  'dnt': '1',
  'Cookie': 'JSESSIONID=dQJTbqhpYdg1PMjJZkYT9bTyLLnMqV43zxj2sws1gZ2fQ8fJn0CQ!-392092779',
  'cache-control': 'no-cache',
  'content-type': 'application/x-www-form-urle ncoded'
}

Когда я использую те же данные для имитации Post в Postman, он отлично работает, и я получаю таблицу, как ожидалось. Изображение 174551 Вот полезная нагрузка от почтальона:

captcha:331683
districtCode:7
docSel:1
doct:861
path:/APCARDECClient
regyear:2018
selectedSroId:null
sroId:714
sroVal:TADIKONDA(714)

и заголовки Postman:

Origin:http://registration.ap.gov.in
Upgrade-Insecure-Requests:1
DNT:1
User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referer:http://registration.ap.gov.in/APCARDECClient/FetchHelpDetails
Accept-Encoding:gzip, deflate
Accept-Language:en-US,en;q=0.9,ru;q=0.8,uk;q=0.7
Cookie:JSESSIONID=dQJTbqhpYdg1PMjJZkYT9bTyLLnMqV43zxj2sws1gZ2fQ8fJn0CQ!-392092779
Content-Type:application/x-www-form-urlencoded

Пожалуйста, укажите мне, где я ошибаюсь? Единственная возможность, которую я вижу, - это эта строка:

Content-Type:application/x-www-form-urlencoded

Мне нужно сделать smth явным в Scrapy, чтобы кодировать полезную нагрузку, как это?

PS Когда я использую голые

yield scrapy.Request(url, method ="POST",  body=json.dumps(payload),headers=headers,  callback = self.details1)

Я получаю стартовую страницу с пустыми полями. Изображение 174551

Теги:
scrapy
postman

2 ответа

0

Хорошо. Поэтому проблема была в 'Content-Type': 'application/x-www-form-urlencoded', я заметил это в самом начале, но больше не обращал внимания. Так глупо. Для того, чтобы пройти эту страницу полезной нагрузки должен быть urlencoded как указано Content_Type. Вот как это сделать.

import urllib

payload = {'captcha': '865944',
                 'sroVal': 'TADIKONDA(714)',
                 'sroId': '714',
                 'regyear': '2017', 
                 'doct': '1',
                 'districtCode': '7',
                 'path': '/APCARDECClient',
                 'selectedSroId': 'null',
                 'docSel': '1',
           }

payload = urllib.urlencode(payload)

yield scrapy.Request(url, method ="POST",  body=payload ,headers=headers,  
                     callback = self.details1)
0

Не используйте FormRequest - он просто вводит некоторые заголовки и имеет некоторые ярлыки для тела. Если вы копируете запрос, просто используйте barebones Request.

import headers
headers = {
    # make sure Content Type is set
    'Content-Type': 'application/x-www-form-urlencoded',
    # some other headers
}
payload = """foobar"""
Request(
    url,
    headers=headers,
    method='POST',
    body=payload,
)
  • 0
    если я это сделаю, я получу пустые формы (например, при первом посещении страницы)
  • 0
    Тогда вы что-то упускаете. Будь то заголовок или часть полезной нагрузки. О, и проверьте мое редактирование в Request я сделал тип там, полезная нагрузка должна идти к body

Ещё вопросы

Сообщество Overcoder
Наверх
Меню