Создать POST-запрос к Tumblr - PullRequest
1 голос
/ 21 марта 2012

Я пытаюсь создать запрос на публикацию API Tumblr.Ниже приводится выдержка из указанного API:

The Write API is a very simple HTTP interface. To create a post, send a POST request to http://www.tumblr.com/api/write with the following parameters:
    email - Your account's email address.
    password - Your account's password.
    type - The post type.

Это основные элементы.Я хотел бы отправить фото в API.Согласно API, я бы структурировал свой запрос следующим образом:

email: myEmail
password: myPassword
type: photo
data: "c:\\img.jpg"

Благодаря dtb я могу отправлять РЕГУЛЯРНОЕ сообщение, которое использует только строку для отправки текста, оно не поддерживает отправку изображений.

var postData = new NameValueCollection
{
    { "email", email },
    { "password", password },
    { "type", regular },
    { "body", body }
};

using (var client = new WebClient())
{
     client.UploadValues("http://www.tumblr.com/api/write", data: data);
}

Это работает для отправки обычного, однако в соответствии с API, я должен отправить изображение в multipart/form-data,в качестве альтернативы я мог бы отправить его в Normal POST method,тем не менее, размеры файлов не так высоки, как позволено с первым.client.UploadValues поддерживает данные: что позволяет мне передавать postData в него.client.UploadData также делает, но я не могу понять, как его использовать, я сослался на документацию.Кроме того, открытый файл не может быть передан в NameValueCollection, что ставит меня в тупик относительно того, как я мог бы отправить запрос.

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

Ответы [ 2 ]

4 голосов
/ 21 марта 2012

Вы можете использовать WebClient Class и его UploadValues метод для выполнения запроса POST с application/x-www-form-urlencoded payload:

var data = new NameValueCollection
{
    { "email", email },
    { "password", password },
    { "type", regular },
    { "body", body }
};

using (var client = new WebClient())
{
     client.UploadValues("http://www.tumblr.com/api/write", data: data);
}
3 голосов
/ 22 марта 2012

Мне удалось выяснить это с помощью библиотеки RestSharp.

//Create a RestClient with the api's url
var restClient = new RestClient("http://tumblr.com/api/write");

//Tell it to send a POST request
var request = new RestRequest(Method.POST);

//Set format and add parameters and files
request.RequestFormat = DataFormat.Json; //I don't know if this line is necessary

request.AddParameter("email", "EMAIL");
request.AddParameter("password", "PASSWORD");
request.AddParameter("type", "photo");
request.AddFile("data", "C:\\Users\\Kevin\\Desktop\\Wallpapers\\1235698997718.jpg");

//Set RestResponse so you can see if you have an error
RestResponse response = restClient.Execute(request);
//MessageBox.Show(response) Perhaps I could wrap this in a try except?

Это работает, но я не уверен, что это лучший способ сделать это.

Если у кого-то есть еще предложения, я с удовольствием их приму.

...