2012-03-27 41 views
9

Tôi gần như dám hỏi, nhưng làm thế nào tôi có thể nhận được dữ liệu phản hồi của một URL? Tôi không thể nhớ nữa.Cách lấy các giá trị đáp ứng url trong Asp.NET

Kịch bản của tôi: Tôi đang sử dụng twitter api để có được ảnh tiểu sử của người dùng. Địa chỉ api đó trả về vị trí jpg. Vì vậy, nếu tôi thực sự viết HTML này trong quan điểm của tôi:

<img src="https://api.twitter.com/1/users/profile_image?screen_name=twitterapi&size=bigger"/> 

Các auto trình duyệt sử dụng jpg đáp ứng cho popertie src. Như thế này:

Bây giờ là câu hỏi của tôi rất đơn giản: làm thế nào tôi có thể nhận được rằng vị trí .jpg trong C# để đưa vào cơ sở dữ liệu của tôi?

+0

tại sao bạn dám :) ..its câu hỏi khá gud! – sajad

Trả lời

10

Tôi không chắc chắn những gì bạn đang yêu cầu.

Tôi nghĩ bạn có thể sử dụng WebClient.DownloadData trong C# để gọi url đó. Khi bạn tải xuống tệp, bạn có thể đặt tệp đó vào cơ sở dữ liệu.

byte[] response = new System.Net.WebClient().DownloadData(url); 

Download a file over HTTP into a byte array in C#?

EDIT: Đây là làm việc cho tôi

WebRequest request = WebRequest.Create("https://api.twitter.com/1/users/profile_image?screen_name=twitterapi&size=bigger"); 
WebResponse response = request.GetResponse(); 
Console.WriteLine(response.ResponseUri); 

Console.Read(); 

từ A way to figure out redirection URL

EDIT: Đây là một PHƯƠNG PHÁP TÔI NGHĨ ... sử dụng show.json từ Read the absolute redirected SRC attribute URL for an image

http://api.twitter.com/1/users/show.json?screen_name=twitterapi

+0

Thx cho câu trả lời của bạn. Nhưng dữ liệu byte không thực sự cần thiết. Bằng cách gọi địa chỉ API của API, Twitter cung cấp lại vị trí của profilepicture. Bạn có thể kiểm tra nó nếu bạn đăng url 'https://api.twitter.com/1/users/profile_image?screen_name=twitterapi&size=bigger' trong trình duyệt của mình. Tôi muốn lưu trữ vị trí jpg được trả về bởi API Twitter – Gigi2m02

+0

họ đang thực hiện chuyển hướng 302 ... kiểm tra câu trả lời cập nhật – Timmerz

+0

Thx. Đó là mã bị mất trong ký ức của tôi. – Gigi2m02

6

Bạn cũng có thể làm điều đó bằng HttpClient:

public class UriFetcher 
{ 
    public Uri Get(string apiUri) 
    { 
     using (var httpClient = new HttpClient()) 
     { 
      var httpResponseMessage = httpClient.GetAsync(apiUri).Result; 
      return httpResponseMessage.RequestMessage.RequestUri; 
     } 
    } 
} 

[TestFixture] 
public class UriFetcherTester 
{ 
    [Test] 
    public void Get() 
    { 
     var uriFetcher = new UriFetcher(); 
     var fetchedUri = uriFetcher.Get("https://api.twitter.com/1/users/profile_image?screen_name=twitterapi&size=bigger"); 
     Console.WriteLine(fetchedUri); 
    } 
} 
+0

Câu trả lời hay; 1 cho ví dụ đơn giản và một bài kiểm tra quá :-) – dash

+0

Thx cho câu trả lời của bạn là tốt, nhưng tôi cảm thấy thoải mái hơn với mã Timmerz. Là hữu ích, nên upvote. – Gigi2m02

2

Bạn có thể sử dụng các lớp HttpWebRequest và HttpWebResponse (thông qua using System.Net) để đạt được điều này;

HttpWebRequest webRequest = 
    WebRequest.Create("https://api.twitter.com/1/users/profile_image?screen_name=twitterapi&size=bigger") as HttpWebRequest; 

    webRequest.Credentials = CredentialCache.DefaultCredentials; 

    HttpWebResponse response = webRequest.GetResponse() as HttpWebResponse; 

    string url = response.ResponseUri.OriginalString; 

url bây giờ chứa chuỗi "https://si0.twimg.com/profile_images/1438634086/avatar_bigger.png"

Các vấn đề liên quan