4eburashk
curl быстрее =)
x
а в пхп print_r(json_encode(blablabla)) в чем проблема сделать
x
постмен это вот это? https://en.wikipedia.org/wiki/Postman_(software)
x
так вообще никакого програмиста не получится если так задачи решать
x
вместа принта юзать сервис, удивительный мир 😂
4eburashk
постмен это вот это? https://en.wikipedia.org/wiki/Postman_(software)
Да. Поделка вместо рук и курла. Но типа там удобно тесты разные писать и запускать.
x
жесть, не ребят, лучше как-то по другому работать если хотите норм результат. хотя понимаю что меня никто не спрашивал но реально чот удивился 😂
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
ну есть штуки посложнее 10 символов)
дак эти штуки посложнее намного лучше понимать, а не просто искать какое-то магическое решение ввиде сервиса
а да
спустя неделю и не вспомнишь
x
да и не надо
а да
так что лишний раз себе гемор насиживать не вижу смысла
x
вот покажи мне юзкейс этого сервиса если так уверен, поржу :)
x
если не влом
а да
ну как доберусь покажу если не забуду обязательно
x
вот самое интересное что я указал сразу на главную проблему. интерфейс. вы пришли юзать го, делайте это правильно. не делайте на манеру пхп, сами же проблемы создаете :)
x
а когда вы не сможете создать структуру под жсон, вы задумаетесь а какой там жсон. добудите жсон. и сделаете нормальное решение на века. для этого го
x
а для говнокодинга прекрасно подходит пхп или питон
🅞leksiy
Я хз, я юзаю json2struct и потом правлю int на float64 где надо 😅 map[string]any{ - это жесть какая-то
4eburashk
Ща посчитаю как и что в РНР... Ну да. message:= { action, data (кодированый json){ user{} parts{} } } user и parts внутри data вместе. потом эта дата кодируется. и запихивается в поле дата массива, где указан action
Andrey
на самом деле единственный норм вариант тут проскакивал, скачать php либу, написать код на php посмотреть что он делает и потом уже переписать на go
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
{"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
если шо, этот код постмен сгенерил :)
Роман
{"OrdersInfo":[],"Errors":[],"Info":{"DocVersion":"2022.01.10"}}
Обалдеть! А я пока что переключился на создание структуры под запрос...
Роман
Сейчас попробую запустить код. Но на самом деле не думал, что плохая документация сможет так испортить работу с API....
Andrey
ладно я помог чем смог надо таки поспать перед утренним созвоном :)
Роман
ладно я помог чем смог надо таки поспать перед утренним созвоном :)
Давай) Ещё раз спасибо за помощь! Теперь примерно понимаю, в какую сторону двигаться при таких проблемах. Спасибо!
Andrey
Давай) Ещё раз спасибо за помощь! Теперь примерно понимаю, в какую сторону двигаться при таких проблемах. Спасибо!
кстати там есть req.Header.Add("Cookie", "__ddg1_=xNFWyjQBQr6jm9hXonbz; PHPSESSID=q4ghrjriesg9rrpuqceoh9rfoj") вместо этого тебе надо в клиенте jar инициализировать, что бы он куки при редиректах сохранял
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 получается в РНР
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)) }
этот пример вообще прекрасен. это нормальна для пхп например, еще раз повторюсь. для задач где надо просто слепить быстро и чтобы работало. но для го это имхо ужасно. поэтому и считается что го более "системный". вот только это скорее про подход, чем про применение языка
Ivan
Правильно ли понимаю, что в голанг структуру передавать и возвращать предпочтительно не по ссылке? По ссылке вообще никогда не стоит. Даже если нужно изменять лучше копию возвращать. Так это или существует альтернативные точки зрения?
Ivan
Про передавать уже спрашивал, интересует про возвращать в основном
Ivan
Указатели имею ввиду извиняюсь
Ivan
в общем случае
Alexander
в общем случае
В общем случае без разницы
Ivan
Утверждается что есть разница