Перейти к содержимому
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

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


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

 

 

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

 

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

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

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


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

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

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

 

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

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

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


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

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

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


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

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

 

Можно.

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


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

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

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

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


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

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

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

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


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

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

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

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


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

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

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

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


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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...