Сервер WWW сообщает об ошибке после запроса POST через интернет Прямые компоненты в Delphi

Я использую Delphi XE4, и я обычно использую Indy с IdHttp.POST для запроса POST на веб-сайты,

На этот раз, когда я пытаюсь выполнить POST-запрос, я получаю сообщение об Error: Your browser is not sending the correct data.

Я очень уверен, что у меня есть POSTing правильные данные, и я использую IOHandler и CookieManager.

Имел дело с этим в течение нескольких дней (буквально)

Вот код (сайт в коде):

 procedure TForm1.Button1Click(Sender: TObject); var s, lge, Kf1, Kf2, Kf3, Kf4 : String; lParam : TStringList; begin S := http.Get('https://www.neobux.com/m/l/'); Memo1.Lines.Add(S); getParamLge(s,lge,'lge'); GetInput(s,Kf1,'id="Kf1"'); GetInput(s,Kf2,'id="Kf2"'); GetInput(s,Kf3,'id="Kf3"'); GetInput(s,Kf4,'id="Kf4"'); lParam := TStringList.Create; lParam.Add('lge='+lge); lParam.Add(Kf1+'=USERNAME'); lParam.Add(Kf2+'=PASSWORD'); lParam.Add(Kf3+'='); lParam.Add(Kf4+'='); lParam.Add('login=1'); memo1.Lines.Add(http.Post('https://www.neobux.com/m/l/', lParam)); end; 

(функция getParamLge и GetInput – это просто функции копирования и pos для извлечения значения из GET respone).

Я подумал, может быть, мне нужны куки, поэтому я добавил это в начале:

  Cookie.CookieCollection.Clear; Cookie.CookieCollection.AddClientCookies('CFID=21531887; CFTOKEN=20369251; dh=20130709111845,1920x1080,{ts ''2013-07-09 06:18:58''}; __utma=90161412.436822896.1373368451.1373368451.1373368451.1; __utmb=90161412.11.10.1373368451; __utmc=90161412; __utmz=90161412.1373368451.1.1.'+'utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __asc=06ff77ad13fc32381fd1f5d6405; __auc=06ff77ad13fc32381fd1f5d6405; __atuvc=4%7C28; MS=flat'); 

Но все напрасно.

Я очень уверен, что получаю правильные данные

Так как это не работает – очевидно, вы этого не делаете (или Delphi не делает – это не имеет никакого значения для сервера).

Вы должны начать обычный цикл отладки:

  1. Соблюдайте нормальное рабочее поведение.
  2. Соблюдайте поведение вашей программы
  3. Найди отличие
  4. Устранить разницу
  5. Проверьте, работает ли программа сейчас
  6. Если нет – перейдите к шагу 2.

Реализацией ссылок будет некоторый WWW browser работающий с сайтом: Opera, Chrome, Firefox, MS IE и т. Д.

  • Инструментом наблюдения будет некоторый HTTP Sniffer сниффер, такой как WireShark или OmniPacket или Microsoft Net Monitor, но, тем не менее, эти манипуляторы с ОС работают на довольно глубоком уровне.
  • Или это может быть локальный прокси с графическим интерфейсом, например, Proxomitron или Membrane Monitor, но для этого потребуется специальная настройка как для программы, так и для браузера, для маршрутизации трафика через этот локальный прокси.

Затем вы должны прочитать о HTTP, начиная с мелкого наблюдения в Википедии, а затем открыть связанные документы RFC (спецификации разных частей протокола HTTP), чтобы вы поняли, что означают наблюдаемые различия и как их исправить. Например, многие люди используют запрос POST, когда они действительно должны использовать запрос GET или такой.

Вы хотите отлаживать HTTP-программу, но для этих протоколов HTTP, workign и borken требуются, и ваш вопрос их не хватает. Более того, скорее всего, вы можете исправить это самостоятельно, просто принесите свой протокол HTTP вашей программы в соответствии с теорией RFC и практикой работы браузеров.

  • Httpclient 4, ошибка 302. Как перенаправить?
  • Можно ли кэшировать методы POST в HTTP?
  • Как использовать getJSON, отправляя данные с помощью метода post?
  • Получение JSON Object Literal из HttpServletRequest
  • Отправить массив объектов через JSON для ASP.Net MVC3
  • Android - как перехватить форму POST в android WebViewClient на уровне API 4
  • Apache HttpClient 4.0.3 - как установить cookie с sessionID для запроса POST?
  • Nodejs POST запрос multipart / form-data
  • В чем разница между POST и PUT HTTP REQUEST?
  • Использование curl для загрузки данных POST с файлами
  • В чем разница между POST и GET?
  • Давайте будем гением компьютера.