누구나 올바른 방향을 가리킬 수 있습니까? 새로운 Bing API를 사용하여 웹 검색을 수행하려고하는데 아래 코드를 사용하여 계속 "HTTP/1.1 400 Bad Request"를 얻습니다. 동일한 요청은 브라우저에서 잘 작동합니다 (사용자 이름을 공란으로 남겨두고 프롬프트 상자 안에 암호로 키를 제공).Bing Search API Azure Marketplace 인증 (Delphi + Indy)
var
IdHTTP1 : TIdHTTP;
uri : string;
myIOhandler : TIdSSLIOHandlerSocketOpenSSL;
begin
myIOhandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
with myIOhandler do
begin
SSLOptions.Method := sslvTLSv1;
SSLOptions.Mode := sslmUnassigned;
SSLOptions.VerifyMode := [];
SSLOptions.VerifyDepth := 0;
host := '';
end;
IdHTTP1:= TIdHTTP.Create(nil);
IdHTTP1.Request.UserAgent:= 'Mozilla/3.0 (compatible; IndyLibrary)';
IdHTTP1.Request.Accept := 'text/javascript';
IdHTTP1.Request.ContentType := 'application/json';
IdHTTP1.Request.ContentEncoding := 'utf-8';
IdHTTP1.HandleRedirects:= True;
IdHTTP1.ConnectTimeout:= 10000;
IdHTTP1.ReadTimeout:= 10000;
IdHTTP1.Request.CacheControl := 'no-cache';
IdHTTP1.Request.BasicAuthentication:= True;
IdHTTP1.Request.Authentication:= TIdBasicAuthentication.Create;
IdHTTP1.Request.Authentication.Username:= '';
IdHTTP1.Request.Authentication.Password:= APIKey;//Encode64(APIKey);//Encode64(APIKey+':'+APIKey)
IdHTTP1.IOHandler:= myIOHandler;
uri:= 'https://api.datamarket.azure.com/Bing/SearchWeb/Web?'+
'Query=%27'+ query_text +'%27&$format=JSON&$top=50&$skip=0';
s:= IdHTTP1.Get(uri);
MS 설명서가 매우 좋지 않습니다.
HTTP 기본 인증이 빈 사용자 이름으로 작동해야합니까? query_text가 올바르게 "URL 인코딩 됨"입니까? – mjn
마이그레이션 가이드 문서에 따르면 : "사용자 이름 필드를 비워두고 암호 필드에 계정 키를 입력하십시오." –
테스트를 위해 인코딩이 필요한 문자를 사용하고 있지 않습니다. 나는 나중에 다룰 것이다. 동일한 문자열이 브라우저에서 작동합니다. –