2

我刚刚从 Imgur 收到了我独特的开发人员 API 密钥,我渴望开始破解这个宝贝。

首先是一个简单的测试来开始。如何使用 C# 上传图像?我使用 Python 找到了这个:

#!/usr/bin/python

import pycurl

c = pycurl.Curl()
values = [
          ("key", "YOUR_API_KEY"),
          ("image", (c.FORM_FILE, "file.png"))]
# OR:     ("image", "http://example.com/example.jpg"))]
# OR:     ("image", "BASE64_ENCODED_STRING"))]

c.setopt(c.URL, "http://imgur.com/api/upload.xml")
c.setopt(c.HTTPPOST, values)

c.perform()
c.close()
4

3 回答 3

4

看起来该网站使用 HTTP Post 上传图片。查看HTTPWebRequest类并使用它来 POST 到 URL:使用 HTTPRequest 发布数据

于 2010-01-10T23:48:17.537 回答
4

Imgur API 现在提供了一个完整的 c# 示例

using System;
using System.IO;
using System.Net;
using System.Text;

namespace ImgurExample
{
    class Program
    {
        static void Main(string[] args)
        {
            PostToImgur(@"C:\Users\ashwin\Desktop\image.jpg", IMGUR_ANONYMOUS_API_KEY);
        }

        public static void PostToImgur(string imagFilePath, string apiKey)
        {
            byte[] imageData;

            FileStream fileStream = File.OpenRead(imagFilePath);
            imageData = new byte[fileStream.Length];
            fileStream.Read(imageData, 0, imageData.Length);
            fileStream.Close();

            string uploadRequestString = "image=" + Uri.EscapeDataString(System.Convert.ToBase64String(imageData)) + "&key=" + apiKey;

            HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("http://api.imgur.com/2/upload");
            webRequest.Method = "POST";
            webRequest.ContentType = "application/x-www-form-urlencoded";
            webRequest.ServicePoint.Expect100Continue = false;

            StreamWriter streamWriter = new StreamWriter(webRequest.GetRequestStream());
            streamWriter.Write(uploadRequestString);
            streamWriter.Close();

            WebResponse response = webRequest.GetResponse();
            Stream responseStream = response.GetResponseStream();
            StreamReader responseReader = new StreamReader(responseStream);

            string responseString = responseReader.ReadToEnd();
        }
    }
}
于 2012-02-01T20:58:40.687 回答
1

你为什么不为此使用 NuGet:称为 Imgur.API 和上传你会有这样的方法:

/*
   The refresh token and all the values represented by constans are given when you allow the application in your imgur panel on the response url
*/

public OAuth2Token CreateToken()
{
    var token = new OAuth2Token(TOKEN_ACCESS, REFRESH_TOKEN, TOKEN_TYPE, ID_ACCOUNT, IMGUR_USER_ACCOUNT, int.Parse(EXPIRES_IN));
    return token;
}

//Use it only if your token is expired
public Task<IOAuth2Token> RefreshToken()
{
    var client = new ImgurClient(CLIENT_ID, CLIENT_SECRET);
    var endpoint= new OAuth2Endpoint(client);
    var token = endpoint.GetTokenByRefreshTokenAsync(REFRESH_TOKEN);
    return token;
}


public async Task UploadImage()
{
     try
     {
          var client = new ImgurClient(CLIENT_ID, CLIENT_SECRET, CreateToken());
          var endpoint = new ImageEndpoint(client);
          IImage image;
          //Here you have to link your image location
          using (var fs = new FileStream(@"IMAGE_LOCATION", FileMode.Open))
          {
             image = await endpoint.UploadImageStreamAsync(fs);
          }
                Debug.Write("Image uploaded. Image Url: " + image.Link);
         }
         catch (ImgurException imgurEx)
         {
                Debug.Write("Error uploading the image to Imgur");
                Debug.Write(imgurEx.Message);
         }
     }

您也可以在这里找到所有参考资料:Imgur.API NuGet

于 2017-02-16T10:30:49.637 回答