4eburashk
curl быстрее =)
x
а в пхп print_r(json_encode(blablabla)) в чем проблема сделать
x
постмен это вот это? https://en.wikipedia.org/wiki/Postman_(software)
x
так вообще никакого програмиста не получится если так задачи решать
x
вместа принта юзать сервис, удивительный мир 😂
x
жесть, не ребят, лучше как-то по другому работать если хотите норм результат. хотя понимаю что меня никто не спрашивал но реально чот удивился 😂
а да
🅞leksiy
x
вы серьезно? сервис лучше чем принт в редакторе?
а да
x
уау
x
т.е. написать 10 символов в редакторе сложнее чем пойти юзать какой-то сервис?
x
ну окей
x
я ничего не понимаю :)
а да
4eburashk
message := map[string]interface{}{
"data": map[string]interface{}{
"action": "GetOrdersStatus",
"data": map[string]interface{}{
"user": map[string]interface{}{
"user_id": 123,
"user_login": "456",
"user_password": "789",
},
"parts": map[string]interface{}{
"InnerID": 700001,
"RemoteID": 800001,
},
},
},
}
output:
2022/12/14 03:31:47 map[Info:map[Errors:[Не передан параметр data]]]
2022/12/14 03:31:47 <nil>
message := map[string]interface{}{
"data": map[string]interface{}{
"action": "GetOrdersStatus",
"data": map[string]interface{}{
"user": map[string]interface{}{
"user_id": 123,
"user_login": "456",
"user_password": "789",
},
"parts": map[string]interface{}{
"InnerID": 700001,
"RemoteID": 800001,
},
},
},
}
Если смотреть на скрин с РНР, то структура json ну совсем другая.
message := map[string]interface{}{
"action": "GetOrdersStatus",
"data": map[string]interface{}{
"user": map[string]interface{}{
"user_id": 123,
"user_login": "456",
"user_password": "789",
},
"parts": map[string]interface{}{
"InnerID": 700001,
"RemoteID": 800001,
},
},
}
а да
а да
спустя неделю и не вспомнишь
x
да и не надо
а да
так что лишний раз себе гемор насиживать не вижу смысла
x
вот покажи мне юзкейс этого сервиса если так уверен, поржу :)
x
если не влом
а да
ну как доберусь покажу если не забуду обязательно
Andrey
message := map[string]interface{}{
"data": map[string]interface{}{
"action": "GetOrdersStatus",
"data": map[string]interface{}{
"user": map[string]interface{}{
"user_id": 123,
"user_login": "456",
"user_password": "789",
},
"parts": map[string]interface{}{
"InnerID": 700001,
"RemoteID": 800001,
},
},
},
}
Если смотреть на скрин с РНР, то структура json ну совсем другая.
message := map[string]interface{}{
"action": "GetOrdersStatus",
"data": map[string]interface{}{
"user": map[string]interface{}{
"user_id": 123,
"user_login": "456",
"user_password": "789",
},
"parts": map[string]interface{}{
"InnerID": 700001,
"RemoteID": 800001,
},
},
}
это был первый вариант и он не срабатывает
x
вот самое интересное что я указал сразу на главную проблему. интерфейс. вы пришли юзать го, делайте это правильно. не делайте на манеру пхп, сами же проблемы создаете :)
x
а когда вы не сможете создать структуру под жсон, вы задумаетесь а какой там жсон. добудите жсон. и сделаете нормальное решение на века. для этого го
x
а для говнокодинга прекрасно подходит пхп или питон
Andrey
🅞leksiy
Я хз, я юзаю json2struct и потом правлю int на float64 где надо 😅
map[string]any{ - это жесть какая-то
4eburashk
Ща посчитаю как и что в РНР...
Ну да.
message:= {
action,
data (кодированый json){
user{}
parts{}
}
}
user и parts внутри data вместе. потом эта дата кодируется. и запихивается в поле дата массива, где указан action
Andrey
Andrey
на самом деле единственный норм вариант тут проскакивал, скачать php либу, написать код на php посмотреть что он делает и потом уже переписать на go
Andrey
Andrey
ну и даже он не поможет, потому что не факт что дока актуальная :)
Andrey
знаете чем по моему мнению программист отличается от разработчика?, тем что программист производит программный код, а разработчик делает продукт, иногда продукт можно сделать за 5 минут не написав не строчки кода
🅞leksiy
Ммм, только увидел скрин, а можно вопрос?
🅞leksiy
Там json уходит или там post поле data?
Andrey
$result = curl_start($request);
function curl_start($request) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://www.avtoto.ru/?soap_server=json_mode" );
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
$result = curl_exec($ch);
//конвертируем вернувшеюся JSON строку в массив и возвращаем
return json_decode($result, true);
}
🅞leksiy
Тогда в чем вопрос, data
🅞leksiy
Не мапа должна быть
🅞leksiy
А обычный string
Andrey
Andrey
{"OrdersInfo":[],"Errors":[],"Info":{"DocVersion":"2022.01.10"}}
Andrey
я сделал пост запрос с форм дата и получил ответ нужный
Andrey
могу кривой код скинуть, дальше уже проще его в норм вид привести
package main
import (
"fmt"
"bytes"
"mime/multipart"
"net/http"
"io/ioutil"
)
func main() {
url := "https://www.avtoto.ru/?soap_server=json_mode"
method := "POST"
payload := &bytes.Buffer{}
writer := multipart.NewWriter(payload)
_ = writer.WriteField("action", "GetOrdersStatus")
_ = writer.WriteField("data", "{\n \"parts\": {\n \"InnerID\": 700001,\n \"RemoteID\": 800001\n },\n \"user\": {\n \"user_id\": 123,\n \"user_login\": \"456\",\n \"user_password\": \"789\"\n }\n }")
err := writer.Close()
if err != nil {
fmt.Println(err)
return
}
client := &http.Client {
}
req, err := http.NewRequest(method, url, payload)
if err != nil {
fmt.Println(err)
return
}
req.Header.Add("Cookie", "__ddg1_=xNFWyjQBQr6jm9hXonbz; PHPSESSID=q4ghrjriesg9rrpuqceoh9rfoj")
req.Header.Set("Content-Type", writer.FormDataContentType())
res, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer res.Body.Close()
body, err := ioutil.ReadAll(res.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(body))
}
Andrey
если шо, этот код постмен сгенерил :)
Andrey
Роман
Сейчас попробую запустить код. Но на самом деле не думал, что плохая документация сможет так испортить работу с API....
Andrey
Andrey
ладно я помог чем смог надо таки поспать перед утренним созвоном :)
Andrey
ddg1 это ддос гвард куки
Andrey
без них запрос может не сработать
Роман
О как. Принял. Ознакомлюсь ещё с этим моментом.
4eburashk
$ cat jsontg.php
<?php
// клепаем json по фотке из телеги.
$data = array(
'user' => array(
'user_id' => 1000000,
'user_login' => 'login',
'user_password' => 'pass',
),
'parts' => array(
array('InnerId' => 700001, 'RemoteID' => 8000001),
array('InnerId' => 700002, 'RemoteID' => 8000002),
array('InnerId' => 700003, 'RemoteID' => 8000003),
array('InnerId' => 700004, 'RemoteID' => 8000004),
),
);
$data_string = json_encode($data);
$request = array(
'action' => 'GetOrdersStatus',
'data' => $data_string,
);
//var_dump($request);
print_r($request);
?>
Результат:
php jsontg.php
Array
(
[action] => GetOrdersStatus
[data] => {"user":{"user_id":1000000,"user_login":"login","user_password":"pass"},"parts":[{"InnerId":700001,"RemoteID":8000001},{"InnerId":700002,"RemoteID":8000002},{"InnerId":700003,"RemoteID":8000003},{"InnerId":700004,"RemoteID":8000004}]}
)
Вот что там в $request получается в РНР
x
Evgeny
Sanity = nil
x
x
могу кривой код скинуть, дальше уже проще его в норм вид привести
package main
import (
"fmt"
"bytes"
"mime/multipart"
"net/http"
"io/ioutil"
)
func main() {
url := "https://www.avtoto.ru/?soap_server=json_mode"
method := "POST"
payload := &bytes.Buffer{}
writer := multipart.NewWriter(payload)
_ = writer.WriteField("action", "GetOrdersStatus")
_ = writer.WriteField("data", "{\n \"parts\": {\n \"InnerID\": 700001,\n \"RemoteID\": 800001\n },\n \"user\": {\n \"user_id\": 123,\n \"user_login\": \"456\",\n \"user_password\": \"789\"\n }\n }")
err := writer.Close()
if err != nil {
fmt.Println(err)
return
}
client := &http.Client {
}
req, err := http.NewRequest(method, url, payload)
if err != nil {
fmt.Println(err)
return
}
req.Header.Add("Cookie", "__ddg1_=xNFWyjQBQr6jm9hXonbz; PHPSESSID=q4ghrjriesg9rrpuqceoh9rfoj")
req.Header.Set("Content-Type", writer.FormDataContentType())
res, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer res.Body.Close()
body, err := ioutil.ReadAll(res.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(body))
}
это
x
Sanity = nil
это
По каким это критериям?
Sanity = nil
И если так плохо то как хорошо?
x
структура логическая внутри текстового блока это ад адский. ну смотри, если бы я например увидел такое на проде на го, или где-то близко к проду - это было бы увольнение
x
так что вопрос: чем этот код может помочь?
x
как хттп запрос послать дак тут документация поможет, да и примеров дофига в сети.
x
больше применения не вижу
x
могу кривой код скинуть, дальше уже проще его в норм вид привести
package main
import (
"fmt"
"bytes"
"mime/multipart"
"net/http"
"io/ioutil"
)
func main() {
url := "https://www.avtoto.ru/?soap_server=json_mode"
method := "POST"
payload := &bytes.Buffer{}
writer := multipart.NewWriter(payload)
_ = writer.WriteField("action", "GetOrdersStatus")
_ = writer.WriteField("data", "{\n \"parts\": {\n \"InnerID\": 700001,\n \"RemoteID\": 800001\n },\n \"user\": {\n \"user_id\": 123,\n \"user_login\": \"456\",\n \"user_password\": \"789\"\n }\n }")
err := writer.Close()
if err != nil {
fmt.Println(err)
return
}
client := &http.Client {
}
req, err := http.NewRequest(method, url, payload)
if err != nil {
fmt.Println(err)
return
}
req.Header.Add("Cookie", "__ddg1_=xNFWyjQBQr6jm9hXonbz; PHPSESSID=q4ghrjriesg9rrpuqceoh9rfoj")
req.Header.Set("Content-Type", writer.FormDataContentType())
res, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer res.Body.Close()
body, err := ioutil.ReadAll(res.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(body))
}
этот пример вообще прекрасен. это нормальна для пхп например, еще раз повторюсь. для задач где надо просто слепить быстро и чтобы работало. но для го это имхо ужасно. поэтому и считается что го более "системный". вот только это скорее про подход, чем про применение языка
Anton
Ivan
Правильно ли понимаю, что в голанг структуру передавать и возвращать предпочтительно не по ссылке? По ссылке вообще никогда не стоит. Даже если нужно изменять лучше копию возвращать. Так это или существует альтернативные точки зрения?
Ivan
Про передавать уже спрашивал, интересует про возвращать в основном
Ivan
Указатели имею ввиду извиняюсь
Alexander
Ivan
в общем случае
Ivan
Утверждается что есть разница