Перейти к публикации
Форум - ComputerCraft
ECS

PUT-запрос средствами OC

Рекомендованные сообщения

Доброго времени суток. Захотелось написать клиент для работы с гитхабом через API, однако для заливки файлов на репозиторий требуется отправка PUT-запроса с соответствующим содержимым:

MQbjr8P.png?1
 
Вопрос: это вообще реализуемо через интернет-карту? Если тут имеются эксперты в области веб-запросов, то подскажите, как познать сию магию. Наиболее логичным мне показалось решение ниже, однако увы:

local handle = require("component").internet.request(
  "https://api.github.com/repos/IgorTimofeev/Test/contents/Meow.cpp",
  '{"path":"meow.cpp","message":"lol","content":"aGVsbG8gd29ybGQ="}',
  {
    ["User-Agent"] = "Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20100101 Firefox/42.0",
    ["Authorization"] = "Basic base64encoded login:pass pair",
    ["Content-Type"] = "application/application/json",
  }
)

for i = 1, 30 do
  print(handle.read(math.huge))
end

handle.close()

В то же время через специализированный софт все прекрасно заливается:
 
mRH6yw3.png?1 fzRZTS4.png?1
 
 И, разумеется, вариант с консольным curl также вполне себе рабочий:

curl -ivX PUT -u login:pass -d '{"path": "meow.cpp", "message": "lol", "content": "aGVsbG8gd29ybGQ="}' https://api.github.com/repos/IgorTimofeev/Test/contents/meow.cpp
{
  "content": {
    "name": "meow.cpp",
    "path": "meow.cpp",
    "sha": "95d09f2b10159347eece71399a7e2e907ea3df4f",
    "size": 11,
    "url": "https://api.github.com/repos/IgorTimofeev/Test/contents/meow.cpp?ref=master",
    "html_url": "https://github.com/IgorTimofeev/Test/blob/master/meow.cpp",
    "git_url": "https://api.github.com/repos/IgorTimofeev/Test/git/blobs/95d09f2b10159347eece71399a7e2e907ea3df4f",
    "download_url": "https://raw.githubusercontent.com/IgorTimofeev/Test/master/meow.cpp",
    "type": "file",
    "_links": {
      "self": "https://api.github.com/repos/IgorTimofeev/Test/contents/meow.cpp?ref=master",
      "git": "https://api.github.com/repos/IgorTimofeev/Test/git/blobs/95d09f2b10159347eece71399a7e2e907ea3df4f",
      "html": "https://github.com/IgorTimofeev/Test/blob/master/meow.cpp"
    }
  },
  "commit": {
    "sha": "38e198640380a061ec9357677fa275ed2a450202",
    "node_id": "MDY6Q29tbWl0MTQ3ODczMzQzOjM4ZTE5ODY0MDM4MGEwNjFlYzkzNTc2NzdmYTI3NWVkMmE0NTAyMDI=",
    "url": "https://api.github.com/repos/IgorTimofeev/Test/git/commits/38e198640380a061ec9357677fa275ed2a450202",
    "html_url": "https://github.com/IgorTimofeev/Test/commit/38e198640380a061ec9357677fa275ed2a450202",
    "author": {
      "name": "Igor",
      "email": "sosi@mail.ru",
      "date": "2018-09-07T22:37:07Z"
    },
    "committer": {
      "name": "Igor",
      "email": "sosi@mail.ru",
      "date": "2018-09-07T22:37:07Z"
    },
    "tree": {
      "sha": "86d1529b4193d66705cc2272715009166deb16b2",
      "url": "https://api.github.com/repos/IgorTimofeev/Test/git/trees/86d1529b4193d66705cc2272715009166deb16b2"
    },
    "message": "lol",
    "parents": [
      {
        "sha": "db4b95734315298cad0e733421051524b4e32fc1",
        "url": "https://api.github.com/repos/IgorTimofeev/Test/git/commits/db4b95734315298cad0e733421051524b4e32fc1",
        "html_url": "https://github.com/IgorTimofeev/Test/commit/db4b95734315298cad0e733421051524b4e32fc1"
      }
    ],
    "verification": {
      "verified": false,
      "reason": "unsigned",
      "signature": null,
      "payload": null
    }
  }
}
Изменено пользователем ECS

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Как писал уже в похожей теме на оф. форуме Фингер, встроенная в мод интернет плата не имеет удобного саппорта PUT запросов.

Если очень надо, можно сделать хак через сокет.

 

Готовый хак (слегка сырой) от Фингера можно найти тут: libhttp.

 

P.S. Issue в репозитории OpenComputers висит уже два года, и никакого шевеления.

Изменено пользователем Totoro
  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

Если очень надо, можно сделать хак через сокет.

 

Что ж, спасибо за инфу. Видимо, судьба тонко намекает, что оно не очень-то уж и надо хд

Либу опробовать, увы, не удалось из-за тонны зависимостей. Вручную качать сдохну, а Hel все лежит и лежит, дыа

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Проблема решена окольным путем через множество GET/POST-запросов. Если кто-то столкнется с апи гитхаба и аналогичной ситуацией, то вот мануал:

http://www.levibotelho.com/development/commit-a-file-with-the-github-api/

 

Единственный нюанс: в последнем пункте требуется использование метода PATCH, однако POST с задачей также прекрасно справился.

Изменено пользователем ECS
  • Like 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Можно ли написать put запрос через тсл сокеты фингера?

 

Можно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У фингера тсл-сокетов нет. Вопрос неясен.

Я помню ты писал какие-то сокеты зашифрованные.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да. TLS :) Собственно, о них Тотора уже и написал.

Да, с и л местами попутал.  :D

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×