Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
leo_bruno Profissional
Registrado: Sexta-Feira, 16 de Abril de 2010 Mensagens: 666
|
Enviada: Qua Nov 15, 2017 11:24 am Assunto: [Resolvido] - Obter Json usando indy |
|
|
Olá pessoALL:
Eu preciso passar uma querystring pra obter Json em string, mas não estou sabendo como fazer.
Recebo "Socket error 10054" "Connection reset by peer".
Se eu faço um teste pelo browser colocando diretamente a query http://www.theimdbapi.org/api/"movie"?movie_id=tt0418279 , funciona normalmente.
Estou utilizando o metodo correto (Post)?
Alguém tem experiência com isso pra me ajudar?
Aqui esta minha classe:
Código: |
unit TheIMDBApi;
interface
uses
System.SysUtils, IdHTTP, System.Classes, FMX.Dialogs;
type
TTheImdbApi = class(TObject)
private
function GetJsonInfo(aImdbCode: String):string;
public
procedure Teste;
end;
implementation
{ TTheImdbApi }
const
cUrl = 'http://www.theimdbapi.org/api/"movie"?';
function TTheImdbApi.GetJsonInfo(aImdbCode: String): string;
const
cIdMetodo = '"TTheImdbApi.GetJsonInfo" Responsável por obter a informação do filme na API The IMDB.' + sLineBreak;
var
_Http : TIdHTTP;
_ParamList : TStringList;
begin
_Http := TIdHTTP.Create(nil);
_ParamList := TStringList.Create;
_ParamList.Add('movie_id=' + aImdbCode);
try
try
Result := _Http.Post(cURL, _ParamList);
except
on e:exception do
begin
Result := '';
raise Exception.Create(cIdMetodo + e.Message);
end;
end;
finally
FreeAndNil(_Http);
_ParamList.Free;
end;
end;
procedure TTheImdbApi.Teste;
begin
Showmessage(GetJsonInfo('tt0418279'));
end;
|
Editado pela última vez por leo_bruno em Qui Nov 16, 2017 11:47 am, num total de 1 vez |
|
Voltar ao Topo |
|
|
imex Moderador
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Qua Nov 15, 2017 2:15 pm Assunto: |
|
|
Boa tarde,
Não tenho experiência com isso mas experimente fazer uns testes com o método Get:
Código: | function GetJsonInfo(aImdbCode: String): string;
const
cIdMetodo = '"TTheImdbApi.GetJsonInfo" Responsável por obter a informação do filme na API The IMDB.' + sLineBreak;
var
_Http : TIdHTTP;
begin
_Http := TIdHTTP.Create(nil);
try
_Http.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; rv:56.0) Gecko/20100101 Firefox/56.0';
try
Result := _Http.Get(cURL + 'movie_id=' + aImdbCode);
except
on e:exception do
begin
Result := '';
raise Exception.Create(cIdMetodo + e.Message);
end;
end;
finally
FreeAndNil(_Http);
end;
end; |
obs: parece que o fórum acrescentou aspas duplas na url deixando o "movie" entre aspas
Espero que ajude
_________________
Assinatura: https://www.imoveisemexposicao.com.br/imoveis-venda-guarulhos!bonsucesso-residencial-casa |
|
Voltar ao Topo |
|
|
strak2012 Colaborador
Registrado: Segunda-Feira, 13 de Janeiro de 2014 Mensagens: 1518 Localização: Maceió - AL
|
Enviada: Qua Nov 15, 2017 4:57 pm Assunto: |
|
|
Primeiramente verifique a questão da aspa dupla mencionada acima
Código: | cUrl = 'http://www.theimdbapi.org/api/""movie""?'; |
Provavelmente elas não existe;
Segundamente se é que existe o termo existe, podes manter o método post isso depende da api que estar online, se aceita get ou post ou ambos.
Se basei no response este deve ter retorno de uma string contendo o json em questão, e razão por acreditar que o método correto é o post e não o get seria os paramentos usado no post.
Com a string json basta converter-lo em um objeto Tjsonobject e pronto tudo feito.
Para mais detalhe ou duvida favor deixar seu fedback. _________________ Tudo podemos quando tudo sabemos! |
|
Voltar ao Topo |
|
|
leo_bruno Profissional
Registrado: Sexta-Feira, 16 de Abril de 2010 Mensagens: 666
|
Enviada: Qui Nov 16, 2017 7:40 am Assunto: |
|
|
Obrigado Imex e Strak2012 pelas resostas.
Entrei em contato com os mantenedores da API e fui informado que somente suportam "Get".
Então simplifiquei pra ver se funcionava.
Comecei um outro projeto, desta vez em VCL, pra testar.
Código: |
procedure TForm1.btn1Click(Sender: TObject);
var
_text : string;
begin
_text := idhtp1.Get('http://www.theimdbapi.org/api/"movie"?movie_id=tt0418279');
ShowMessage(_text);
end;
|
Referente às aspas, foi o forum que adicionou.
Mesmo neste exemplo simples usando GET, continuo recebendo forbbiden.
Se eu passo a mesma string pelo browser, funciona numa boa. Desta maneira assumo que a API esta funcionando e deve ser alguma coisa do meu lado. |
|
Voltar ao Topo |
|
|
natanbh1 Colaborador
Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
Enviada: Qui Nov 16, 2017 9:19 am Assunto: |
|
|
Faça um teste com o código abaixo:
Código: | var
Json: string;
HTTP1: TIdHTTP;
begin
with HTTP1 do
begin
HTTP1 := TIdHTTP.Create(nil);
try
Request.Accept := 'text/html, */*';
Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon)';
Request.ContentType := 'application/x-www-form-urlencoded';
HandleRedirects := True;
Json := Get('http://www.theimdbapi.org/api/"movie"?movie_id=tt0418279');
ShowMessage(Json);
finally
Free;
end;
end;
end; |
No endereço dentro da variável Json deixe a palavra "movie" sem aspas.
Ao postar dentro da tag [code] está sendo acrescentado estas aspas indevidamente. _________________ ''A persistência é o caminho para o êxito.''
Charlie Chaplin |
|
Voltar ao Topo |
|
|
leo_bruno Profissional
Registrado: Sexta-Feira, 16 de Abril de 2010 Mensagens: 666
|
Enviada: Qui Nov 16, 2017 11:46 am Assunto: |
|
|
natanbh1, muito obrigado, funcionou pereitamente.
O meu get não tinha funcionado por não ter especificado os parâmetros que você listou.
natanbh1 escreveu: | Faça um teste com o código abaixo:
Código: | var
Json: string;
HTTP1: TIdHTTP;
begin
with HTTP1 do
begin
HTTP1 := TIdHTTP.Create(nil);
try
Request.Accept := 'text/html, */*';
Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon)';
Request.ContentType := 'application/x-www-form-urlencoded';
HandleRedirects := True;
Json := Get('http://www.theimdbapi.org/api/""movie""?movie_id=tt0418279');
ShowMessage(Json);
finally
Free;
end;
end;
end; |
No endereço dentro da variável Json deixe a palavra ""movie"" sem aspas.
Ao postar dentro da tag [code] está sendo acrescentado estas aspas indevidamente. |
|
|
Voltar ao Topo |
|
|
|