Как я могу использовать curl для тестирования сервера перехвата Github после получения? - PullRequest
5 голосов
/ 18 ноября 2011

Github поддерживает перехваты после получения для уведомления об изменениях кода, задокументированные здесь . Теперь, чтобы протестировать сервер перехвата, мне нужно опубликовать немного json, и я бы хотел использовать curl для этого. Я делал это раньше, но так редко, что забывал свое решение.

Насколько я помню, это каждый раз было утомительно.

Люди из Github предоставляют этот документ JSON в качестве примера данных, которые будут помещены в параметр payload:

{
  "before": "5aef35982fb2d34e9d9d4502f6ede1072793222d",
  "repository": {
    "url": "http://github.com/defunkt/github",
    "name": "github",
    "description": "You're lookin' at it.",
    "watchers": 5,
    "forks": 2,
    "private": 1,
    "owner": {
      "email": "chris@ozmm.org",
      "name": "defunkt"
    }
  },
  "commits": [
    {
      "id": "41a212ee83ca127e3c8cf465891ab7216a705f59",
      "url": "http://github.com/defunkt/github/commit/41a212ee83ca127e3c8cf465891ab7216a705f59",
      "author": {
        "email": "chris@ozmm.org",
        "name": "Chris Wanstrath"
      },
      "message": "okay i give in",
      "timestamp": "2008-02-15T14:57:17-08:00",
      "added": ["filepath.rb"]
    },
    {
      "id": "de8251ff97ee194a289832576287d6f8ad74e3d0",
      "url": "http://github.com/defunkt/github/commit/de8251ff97ee194a289832576287d6f8ad74e3d0",
      "author": {
        "email": "chris@ozmm.org",
        "name": "Chris Wanstrath"
      },
      "message": "update pricing a tad",
      "timestamp": "2008-02-15T14:36:34-08:00"
    }
  ],
  "after": "de8251ff97ee194a289832576287d6f8ad74e3d0",
  "ref": "refs/heads/master"
}

Сохранение этого как /tmp/example.json Я думал что

 $ curl -XPOST -F "payload=@/tmp/example.json" http://localhost:3000/

было бы правильным вызовом curl, но я был не прав. Используя мой пример проекта hooks приведенные выше результаты:

127.0.0.1 - - [17/Nov/2011 22:20:51] "POST  HTTP/1.1" 200 - 0.0295
{:filename=>"example.json", :type=>"application/octet-stream", :name=>"payload", :tempfile=>#<File:/tmp/RackMultipart20111117-11639-1ecu4i1>, :head=>"Content-Disposition: form-data; name=\"payload\"; filename=\"example.json\"\r\nContent-Type: application/octet-stream\r\n"}

который, учитывая определение действия для этой конечной точки:

class HomeAction < Cramp::Action
  def start
    puts params[:payload]

    render 'thanks'
    finish
  end
end

не совсем ожидаемо. Итак, как я могу использовать версию curl для командной строки, чтобы разместить бит JSON в качестве данных, для параметра payload?

1 Ответ

6 голосов
/ 12 декабря 2011

Мне удалось сделать эту работу со следующим:

  1. Сохранить данные json в файл.
  2. Удалить новые строки из файла json. (Команда Vim = :%s/\n//g)
  3. curl --data-urlencode payload@json_data.txt [URL]

Похоже, что при отправке на Postbin через GitHub & Curl были получены идентичные результаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...