HTTP POST путем преобразования Java в Delphi с использованием Indy - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть следующий код на 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;

1 Ответ

0 голосов
/ 08 декабря 2018

@ Рекомендация Реми Лебо является ключом к решению проблемы и основана на этой ссылке [https://stackoverflow. .... are-query-string-keys-чувствительно к регистру] [1] мой запросвернуть данные (то есть: LowerCase (md5hash ('password'))) может кому-то помочь.Спасибо, ребята, вы спаситель.

 lHTTP := TIdHTTP.Create;
      try
      lHTTP.Request.UserAgent := 'Apache-HttpClient/4.5.3 (Java/1.8.0_60)'; //this save me
      lHTTP.Request.ContentType := 'application/x-www-form-urlencoded';
      lHTTP.Request.Connection:= 'Keep-Alive';
      lHTTP.HTTPOptions:= [hoKeepOrigProtocol];
      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;
...