У меня есть следующий код на Java, который я хочу преобразовать в Delphi.Чтобы получить ответ в JSON ниже, для получения токена с сервера используется код Java.Код в eclipse дает желаемый результат, но когда я пытаюсь преобразовать код в Delphi, я получаю ответ от сервера «нелегального пользователя».
Я считаю, что ошибка в отправкезапрос.Приведенный ниже код выполняет правильный запрос в Delphi?
Java-код:
headerMap.put("Content-Type", "application/x-www-form-urlencoded");
private static void sendPost(Map<String, String> headerMap, Map<String, String> paramMap) {
try {
HttpPost post = new HttpPost(openapi_url);
List<NameValuePair> list = new ArrayList<NameValuePair>();
for (String key : paramMap.keySet()) {
list.add(new BasicNameValuePair(key, paramMap.get(key)));
}
post.setEntity(new UrlEncodedFormEntity(list, "UTF-8"));
if (null != headerMap) {
post.setHeaders(assemblyHeader(headerMap));
}
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpResponse response = httpClient.execute(post);
HttpEntity entity = response.getEntity();
System.out.println(EntityUtils.toString(entity, "utf-8"));
} catch (IOException e) {
System.err.println(e);
}
}
/**
*
* @param headers
* @return
*/
private static Header[] assemblyHeader(Map<String, String> headers) {
Header[] allHeader = new BasicHeader[headers.size()];
int i = 0;
for (String str : headers.keySet()) {
allHeader[i] = new BasicHeader(str, headers.get(str));
i++;
}
return allHeader;
}
Delphi-код:
ParamList := TStringList.Create();
for item in Dictionary do
begin
ParamList.Add(item.Key + '=' + item.Value);
end;
for I := 0 to Dictionary.Count-1 do begin
Memo1.Lines.Add(ParamList.Strings[I]);
end;
try
lHTTP := TIdHTTP.Create;
lHTTP.Request.ContentType := 'application/x-www-form-urlencoded';
lHTTP.Request.CharSet := 'utf-8';
try
memo2.Lines.Text := lHTTP.Post(openapi_url, ParamList);
except
on E: Exception do
ShowMessage('Error on request: '#13#10 + e.Message);
end
finally
lHTTP.Free;
ParamList.Free;
end;