使用.NET从API获取结果

时间:2009-10-30 03:24:01

标签: winsock

我想在我的.NET应用程序中使用Rapidshare API,但我对如何发送请求并带回结果感到困惑。你使用Winsock还是其他方法?

网址如下: http://api.rapidshare.com/cgi-bin/rsapi.cgi?sub=checkfiles_v1&files=288725357&filenames=my_upload.txt

感谢。

2 个答案:

答案 0 :(得分:1)

查看System.Net命名空间,特别是System.Net.WebClient。

http://msdn.microsoft.com/en-us/library/system.net.webclient(VS.80).aspx

答案 1 :(得分:1)

使用WebClient类。

http://msdn.microsoft.com/en-us/library/system.net.webclient%28VS.80%29.aspx

您可以使用此类以编程方式与网页进行交互。这是一些登录网站的示例代码。您可以对此进行调整以与其Web API进行交互:

HttpWebRequest request;
            HttpWebResponse response;
            CookieContainer cookies;
            string url = "http://www.jaxtr.com/user/login.jsp";

            try
            {
                request = (HttpWebRequest)WebRequest.Create(url);
                request.AllowAutoRedirect = true;
                request.CookieContainer = new CookieContainer();
                response = (HttpWebResponse)request.GetResponse();
                if (response.StatusCode == HttpStatusCode.OK)
                {
                    StringBuilder sb = new StringBuilder();
                    StreamReader reader = new StreamReader(response.GetResponseStream());
                    while (!reader.EndOfStream)
                    {
                        sb.AppendLine(reader.ReadLine());
                    }

                    //Get the hidden value out of the form.                
                    String fp = Regex.Match(sb.ToString(), "\"__fp\"\\svalue=\"(([A-Za-z0-9+/=]){4}){1,19}\"", RegexOptions.None).Value;
                    fp = fp.Substring(14);
                    fp = fp.Replace("\"", String.Empty);


                    cookies = request.CookieContainer;
                    //response.Close();
                    String requestString = "http://www.jaxtr.com/user/Login.action?tzOffset=6&navigateURL=&refPage=&jaxtrId=" + HttpUtility.UrlEncode(credentials.Username) + "&password=" + HttpUtility.UrlEncode(credentials.Password) + "&Login=Login&_sourcePage=%2Flogin.jsp&__fp="+HttpUtility.UrlEncode(fp);
                    request = (HttpWebRequest)WebRequest.Create(requestString);
                    request.CookieContainer = cookies; //added by myself

                    response = (HttpWebResponse)request.GetResponse();
                    Console.WriteLine("Response from login:" + response.StatusCode);

                    String messageText = (message.TruncateMessage && message.MessageText.Length > JaxtrSmsMessage.MAX_MESSAGE_LENGTH ? message.MessageText.Substring(JaxtrSmsMessage.MAX_MESSAGE_LENGTH) : message.MessageText);

                    String messageURL = "http://www.jaxtr.com/user/sendsms?CountryName=" + HttpUtility.UrlEncode(message.CountryName) + "&phone=" + HttpUtility.UrlEncode(message.DestinationPhoneNumber) + "&message=" + HttpUtility.UrlEncode(messageText) + "&bySMS=" + HttpUtility.UrlEncode(message.BySMS.ToString().ToLower());

                    request = (HttpWebRequest)WebRequest.Create(messageURL);
                    request.CookieContainer = cookies;
                    response = (HttpWebResponse)request.GetResponse();

                    Console.WriteLine("Response from send SMS command=" + response.StatusCode);

                    StringBuilder output = new StringBuilder();

                    using (Stream s = response.GetResponseStream())
                    {
                        StreamReader sr = new StreamReader(s);
                        while (!sr.EndOfStream)
                        {
                            output.AppendLine(sr.ReadLine());
                        }
                    }
                    response.Close();
                }
                else
                {
                    Console.WriteLine("Client was unable to connect!");
                }
            }
            catch (System.Exception e)
            {
                throw new SMSDeliveryException("Unable to deliver SMS message because "+e.Message, e);
            }

此特定代码登录到SMS消息服务Jaxtr,并发送SMS消息。