Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / пример на PHP перенести в Delphi / 7 сообщений из 7, страница 1 из 1
30.05.2019, 19:39
    #39820466
abwabw
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пример на PHP перенести в Delphi
Дали пример на PHP. Отправка данных (json) через POST c авторизацией.

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
<?php
ini_set('error_reporting', E_ALL);
ini_set('display_errors', true);
$adminJson1 = '{
    "method" : "change_id",
    "data" : {
        "old_id" : "'."0123456789".'",
        "new_id" : "'."9876543210".'"
    }
}';
$postData = $adminJson1;
class PostRequest {
    private $urlApi = "http://abrabr.obr/api.php";
    private $urlAdminApi = "http://abrabr.obr/adminApi.php";
    private $urlLogin = "LoGiN";
    private $urlPassword = "PaSsWoRd";
    function __construct($data){
    $this->sendPostRequest($data);
    }
    function sendPostRequest($data){
        $fields = $data;
        $headers = array(
            'Content-Type: application/json',
            'Authorization: Basic '. base64_encode($this->urlLogin . ":" . $this->urlPassword)
        );
        $fields_string = json_encode($fields);
        $ch = curl_init();
        curl_setopt($ch,CURLOPT_URL, $this->urlAdminApi);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
        curl_setopt($ch, CURLOPT_USERPWD, $this->urlLogin . ":" . $this->urlPassword);
        curl_setopt($ch,CURLOPT_POST, true);
        curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
        curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
        $result = curl_exec($ch);
        if(curl_errno($ch)){
            throw new Exception(curl_error($ch));
        }
        echo $result;
    }
}
$post = new PostRequest(json_decode($postData, true));



В принципе используя idHTTP должно получиться что-то наподобе этого

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
    Json: string;
    sResponse: string;
    JsonToSend: TMemoryStream;
    surlAdminApi, surlLogin, surlPassword: string;
begin
    surlAdminApi:= 'http://abrabr.obr/adminApi.php';
    surlLogin:= 'LoGiN';
    surlPassword:= 'PaSsWoRd';
    Json := '{"method" : "change_id","data" : {"old_id" : "0123456789","new_id" : "9876543210"}}';
    memo1.Text := Json;
    try
      JsonToSend := TStringStream.Create(Json, TEncoding.UTF8);
      JsonToSend.Position := 0;
      HTTP1.Request.ContentType := 'application/json';
      HTTP1.Request.CharSet := 'utf-8';
      try
       sResponse := HTTP1.Post(surlAdminApi, JsonToSend);
      except
       on E: Exception do
       ShowMessage('Error: '#13#10 + e.Message);
      end;
    finally
      JsonToSend.Free;
    end;
    memo1.Text := sResponse;
end;


Но что-то не въеду что, в каком виде и куда вставить вот это
Код: php
1.
'Authorization: Basic '. base64_encode($this->urlLogin . ":" . $this->urlPassword);


вариант username/password не проходит
Код: pascal
1.
2.
      HTTP1.Request.username := surlLogin;
      HTTP1.Request.password := surlPassword;


Ну и не понятны где и как выставлять все параметры, которые выставляются в PHP, типа
Код: php
1.
2.
3.
4.
5.
6.
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
        curl_setopt($ch, CURLOPT_USERPWD, $this->urlLogin . ":" . $this->urlPassword);
        curl_setopt($ch,CURLOPT_POST, true);
        curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
        curl_setopt($ch,CURLOPT_RETURNTRANSFER


Вопрос: помогите перевести пример из PHP в Delphi.
...
Рейтинг: 0 / 0
30.05.2019, 19:59
    #39820469
SQL-Talker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пример на PHP перенести в Delphi
Для начала было бы неплохо загуглить типа - "delphi TIdHTTPServer веб-сервер"
...
Рейтинг: 0 / 0
30.05.2019, 20:23
    #39820473
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пример на PHP перенести в Delphi
Вместо древнего, монструозного и глюкавого INDY лучше пользовать TNetHTTPClient.

http://docwiki.embarcadero.com/RADStudio/Rio/en/Using_an_HTTP_Client
...
Рейтинг: 0 / 0
31.05.2019, 07:27
    #39820529
Snickbw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пример на PHP перенести в Delphi
rgreatВместо древнего, монструозного и глюкавого INDY лучше пользовать TNetHTTPClient.
К сожалению лицензия есть только максимум на XE6. А HTTPClient появился в XE8. Так что придётся ворочаться с INDY. Но за предложение СПС. Есть причина покупать версию повыше.
...
Рейтинг: 0 / 0
31.05.2019, 09:35
    #39820578
kealon(Ruslan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пример на PHP перенести в Delphi
abwabwНо что-то не въеду что, в каком виде и куда вставить вот это
Код: php
1.
'Authorization: Basic '. base64_encode($this->urlLogin . ":" . $this->urlPassword);

это базовая авторизация, она в заголовок запроса должна попасть
вроде в Headers добавляется обычным текстом
...
Рейтинг: 0 / 0
31.05.2019, 10:27
    #39820599
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пример на PHP перенести в Delphi
Snickbw,

Indy, в целом, нормально работает. Лучше только что версию обновить с коробочной на посвежее, удачи.
...
Рейтинг: 0 / 0
31.05.2019, 14:28
    #39820785
Cobalt747
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пример на PHP перенести в Delphi
kealon(Ruslan)это базовая авторизация, она в заголовок запроса должна попасть
вроде в Headers добавляется обычным текстом
+1
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / пример на PHP перенести в Delphi / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]