Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.07.2014, 20:15   #1
Smagulov85
Форумчанин
 
Аватар для Smagulov85
 
Регистрация: 22.11.2009
Сообщений: 142
По умолчанию При ошибки POST запроса ответ пустой

Всем привет! Ребят делаю POST запрос если все правильно получаю в Memo1 JSON ответ, но если я делаю ошибку в POST запросе то получаю пустую строчку и все. При этом сниффер показывает, что ответ от сервера есть.


Код:
// тут параметры они у меня прописаны
 
HTTP.Post('http://сайт/', Data, HTML);
Memo1.Lines.Add(UTF8toANSI(HTML.DataString));
Если помог: Нажми Весы и оставь отзыв!!!
Smagulov85 вне форума Ответить с цитированием
Старый 24.07.2014, 21:27   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну и что? Разве сервер не может возвращать в случае ошибочного по его мнению запроса пустую строку?
И кстати: Пример правильного и ошибочного запроса в студию.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.07.2014, 22:09   #3
crazy horse
ios developer
Старожил
 
Аватар для crazy horse
 
Регистрация: 16.11.2007
Сообщений: 2,885
По умолчанию

Гм. Гм... Я, конечно, в делфи давно не ковырялся, я из других языков, но суть одна, вроде: в случае кривого запроса, обратно возвращается эксепшн с кодом ошибки, не?
Делайте что хотите, но чтобы через полчаса в лесу было светло, сухо и медведь!
crazy horse вне форума Ответить с цитированием
Старый 24.07.2014, 22:22   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
в случае кривого запроса, обратно возвращается эксепшн с кодом ошибки, не?
Примеры запросов:
О сервере ничего не известно из уст автора, но мы предположим что про pakast серверу ничего не известно. Соответственно он уведомит ответом что такой адрес пуст, но не всегда это будет 404 Not found. Это может быть простой ответ типа
Код HTML:
<p class="redcolor">Такой адрес не верный и вообще неправильно ты бутерброд ешь</p>
По факту это будет эксцепшном, но не стандартным.
Видимо у автора сам сервер отвечает похожим способом - ошибка, возврат пустой строки. Тут надо анализировать запрос и ответ.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.07.2014, 22:25   #5
Smagulov85
Форумчанин
 
Аватар для Smagulov85
 
Регистрация: 22.11.2009
Сообщений: 142
По умолчанию

ребят ща все выложу

И так! Парсю сайт егрюл - Федеральная налоговая служба egrul.nalog.ru

ниже приведеный код работает только на поиск Юридическое лицо - ОГРН/ИНН

Код:
unit main;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls,
  IdCookieManager, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdHTTP, superobject, Vcl.Imaging.GIFImg;

type
  TForm1 = class(TForm)
    FNSHTTP: TIdHTTP;
    IdCookieManager1: TIdCookieManager;
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    capcha3: TImage;
    Memo1: TMemo;
    Timer1: TTimer;
    Button2: TButton;
    procedure FNSCook(Sender: TObject);
    procedure FNSCapcha(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  FNLog, FNS_captchaToken : string;
  FNSData : TStringList;
  FNSHTML : TStringStream;

implementation

{$R *.dfm}

function Pars(T_, ForS, _T: string): string;
var
  a, b: integer;
begin
  Result := '';
  if (T_ = '') or (ForS = '') or (_T = '') then
    Exit;
  a := Pos(T_, ForS);
  if a = 0 then
    Exit
  else
    a := a + Length(T_);
  ForS := Copy(ForS, a, Length(ForS) - a + 1);
  b := Pos(_T, ForS);
  if b > 0 then
    Result := Copy(ForS, 1, b - 1);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
FNSCook(Sender);
end;

procedure TForm1.FNSCook(Sender: TObject);
begin
  FNSHTTP.AllowCookies:=True;
  FNSHTTP.HandleRedirects:=True;
  FNSHTTP.Request.Host:='egrul.nalog.ru';
  FNSHTTP.Request.Connection:='keep-alive';
  FNSHTTP.Request.Accept:='text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8';
  FNSHTTP.Request.UserAgent:='Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36';// Береться из ini файла
  //FNSHTTP.Request.AcceptEncoding:='gzip,deflate,sdch';
  FNSHTTP.Request.AcceptLanguage:='ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4';
  FNSHTTP.GET('http://nalog.ru/');
  FNLog:=FNSHTTP.GET('http://egrul.nalog.ru/');
  FNS_captchaToken:=pars('<input type="hidden" name="captchaToken" value="', FNLog, '"/>' );
  FNSCapcha(Sender);
end;



procedure TForm1.Button1Click(Sender: TObject);
begin
FNSHTTP.Request.CustomHeaders.Clear;
FNSData := TStringList.Create;
FNSHTML := TStringStream.Create('');
FNSHTTP.Request.Host:='egrul.nalog.ru';
FNSHTTP.Request.Accept:='application/json, text/javascript, */*; q=0.01';
FNSHTTP.Request.CustomHeaders.Add('X-Requested-With: XMLHttpRequest');
FNSHTTP.Request.UserAgent:='Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36';// Береться из ini файла
FNSHTTP.Request.ContentType:='application/x-www-form-urlencoded';
//FNSHTTP.Request.AcceptEncoding:='gzip,deflate,sdch';
FNSHTTP.Request.AcceptLanguage:='ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4';
FNSHTTP.Request.Referer:='http://egrul.nalog.ru/';
FNSData.Add('kind=ul');
FNSData.Add('srchUl=ogrn');
FNSData.Add('ogrninnul='+Edit1.Text);
FNSData.Add('namul');
FNSData.Add('regionul');
FNSData.Add('srchFl=ogrn');
FNSData.Add('ogrninnfl');
FNSData.Add('fam');
FNSData.Add('nam');
FNSData.Add('otch');
FNSData.Add('region');
FNSData.Add('captcha='+Edit2.Text);
FNSData.Add('captchaToken='+FNS_captchaToken);
FNSHTTP.Post('http://egrul.nalog.ru/', FNSData, FNSHTML);
Memo1.Text:=UTF8toANSI(FNSHTML.DataString);
//Memo1.Text:= FNSHTTP.response.ResponseText;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
FNSHTTP.Disconnect;
FNSCook(Sender);
end;

procedure TForm1.FNSCapcha(Sender: TObject); // Получаем капчу ФНС
Var
imTM:TMemoryStream;
gif:  TgifImage;
begin

  imTM:=TMemoryStream.Create;
  gif:=TgifImage.Create;
  FNSHTTP.Request.Accept:='image/webp,*/*;q=0.8';
  FNSHTTP.Request.UserAgent:='Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36';// Береться из ini файла
  FNSHTTP.Request.Referer:='http://egrul.nalog.ru/';
  FNSHTTP.Request.AcceptLanguage:='ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4';
  FNSHTTP.GET('http://egrul.nalog.ru/static/captcha.html?a='+FNS_captchaToken,imTM);
  imTM.Position:=0;
  gif.LoadFromStream(imTM);

  capcha3.Visible:=true;
  capcha3.Picture.Assign(gif);
  gif.Free;
  imTM.Free;
end;

end.
и так если все правильно получаю ответ скри 1



если делаю ошибку в ОГРН/ИНН или капче то получаю пустую строку скрин 2

Если помог: Нажми Весы и оставь отзыв!!!

Последний раз редактировалось Stilet; 24.07.2014 в 23:32.
Smagulov85 вне форума Ответить с цитированием
Старый 25.07.2014, 14:01   #6
Smagulov85
Форумчанин
 
Аватар для Smagulov85
 
Регистрация: 22.11.2009
Сообщений: 142
По умолчанию

Не кто не поможет!?
Если помог: Нажми Весы и оставь отзыв!!!
Smagulov85 вне форума Ответить с цитированием
Старый 29.07.2014, 11:43   #7
Smagulov85
Форумчанин
 
Аватар для Smagulov85
 
Регистрация: 22.11.2009
Сообщений: 142
По умолчанию

Разобрался с ответом от сервера только получаю закорючки вместо текста

Код:

FNSHTTP.Post('http://egrul.nalog.ru/', FNSData, FNSHTML);
Memo1.Text:=UTF8toANSI(FNSHTML.DataString);
except
   on E: EIdHTTPProtocolException do begin
      Memo1.Text:=E.ErrorMessage;
   end;
как исправить текст?
Изображения
Тип файла: png QIP Shot - Screen 074.png (3.3 Кб, 52 просмотров)
Если помог: Нажми Весы и оставь отзыв!!!
Smagulov85 вне форума Ответить с цитированием
Старый 29.07.2014, 12:07   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

UTF8toANSI убери.
Или у тебя Делфи не юникодная?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.07.2014, 12:20   #9
Smagulov85
Форумчанин
 
Аватар для Smagulov85
 
Регистрация: 22.11.2009
Сообщений: 142
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
UTF8toANSI убери.
Или у тебя Делфи не юникодная?
UTF8toANSI - это когда запрос правильный текст приходит нормально, но когда ошибка закорючки


Если убрать UTF8toANSI то тогда при правильном и не правильном запросе закорючки
Изображения
Тип файла: png QIP Shot - Screen 075.png (10.9 Кб, 51 просмотров)
Если помог: Нажми Весы и оставь отзыв!!!
Smagulov85 вне форума Ответить с цитированием
Старый 29.07.2014, 13:03   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я не обратил внимание. Попробуй так:
Код:
FNSHTTP.Post('http://egrul.nalog.ru/', FNSData, FNSHTML);
Memo1.Text:=UTF8toANSI(FNSHTML.DataString);
except
   on E: EIdHTTPProtocolException do begin
      Memo1.Text:=UTF8toANSI(E.ErrorMessage);
   end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с плюсами при отправки Post запроса TIHttp vmilyoshin Работа с сетью в Delphi 7 13.05.2014 18:21
Проблема при отправке POST запроса nefakt Работа с сетью в Delphi 23 25.02.2014 10:41
Проблема при выполнении POST запроса. MrFriman Работа с сетью в Delphi 3 14.02.2012 09:11
Ответ POST запроса... HTL Работа с сетью в Delphi 1 31.07.2009 12:12
Проблемы с кодировкой при выполнении post запроса FANATID Работа с сетью в Delphi 7 01.03.2009 14:46