2016-06-03 4 views
2

Pacer.gov라는 API를 요청하고 있습니다. 나는 파일이 반환 될 것으로 기대하지만, 나는 그것을 얻지 못하고있다. 누군가 내가 놓친 것을 도와 줄 수 있습니까?Pacer.gov API에서 케이스 요청을하려면 어떻게합니까?

그래서 내 C# 나머지 통화는 다음과 같습니다

(변수 PacerSession는 @의 조나단 - 라인 하트의 도움으로 내가 가진 인증 쿠키()이며, 여기에 대한 자세한 내용 : How do I use RestSharp to POST a login and password to an API?를)

  var client = new RestClient("https://pcl.uscourts.gov/dquery"); 

     client.CookieContainer = new System.Net.CookieContainer(); 
     //var request = new RestRequest("/dquery", Method.POST); 
     var request = new RestRequest(Method.POST); 
     request.AddParameter("download", "1"); 
     request.AddParameter("dl_fmt", "xml"); 
     request.AddParameter("party", "Moncrief"); 

     request.AddHeader("user-agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36"); 
     request.AddHeader("content-type", "text/plain; charset=utf-8"); 
     request.AddHeader("accept", "*/*"); 
     request.AddHeader("accept-encoding", "gzip, deflate, sdch"); 
     request.AddHeader("accept-language", "en-US,en;q=0.8"); 
     request.AddHeader("cookie", "PacerSession=" + PacerSession); 

     IRestResponse response = client.Execute(request); 

크롬에 URL https://pcl.uscourts.gov/dquery?download=1&dl_fmt=xml&party=Moncrief을 입력하면 XML 파일이 반환됩니다. 내가 IRestResponse를 볼 때, 나는 파일처럼 보이지 않습니다. 요청에 문제가 있거나 파일을 다시 가져 오는 중 검색하는 방법을 알아야합니까?

가 여기에 브라우저에서 직접 URL을 사용하는 경우 내가 돌아올 파일의 일부 :

여기 enter image description here

내가 디버깅과 IRestResponse 변수를 볼 때 내가 VS에서 볼 수있는 작업은 다음과 같습니다

6/3/16

이 페이 서 기술에서이 응답을 수신 - UPDATE

enter image description here

지원 :

고급 REST 클라이언트에서 HTTP 302 응답 (다른 페이지로 리디렉션)이 표시됩니다. 일반 브라우저에서는 사용자가 아무 것도 보지 않고 리디렉션이 자동으로 수행됩니다 (브라우저의 URL에도 있음). ARC는 대상 페이지로의 리디렉션을 자동으로 따르지 않습니다. 응답의 헤더에서 결과가있는 대상 URL을 볼 수 있습니다.
이 URL을 수동으로 잘라내어 HTTP GET 요청으로 ARC에 붙여 넣으면 XML 결과가 표시됩니다. 나는 C#을 사용한 적이 없지만 일반적으로 클라이언트가 리디렉션을 따르도록 강제하는 속성이 있습니다.

client.FollowRedirects = true; 

하지만이 코드를 디버깅 할 때 나는 여전히 XML 파일을 확인할 수 없습니다 :

나는이 추가 시도

IRestResponse response = client.Execute(request); 

enter image description here

어떻게받을 수 있나요을 파일? 리디렉션되는 URL에서 파일을 가져 오려면 어떻게해야합니까?

+1

, 콘텐츠 유형은 _not_ XML이다. 그것은 웹 페이지입니다. 특히 페이 서 로그인 페이지. 더 구체적으로는 검색 페이지로 리디렉션되는 페이싱 로그인 페이지입니다. ('ContentType' 속성과'ResponseUri' 속성을보십시오) – theB

+0

@theB에 응답 해 주셔서 감사합니다. Pacer 기술 지원에서 얻은 것부터 요청이 리디렉션되는 것처럼 들립니다. FollowRedirects 옵션을 켜려고했지만 xml 파일을 아직 보지 못했습니다. 이 리디렉션 된 페이지에서 파일을 얻으려면 어떻게해야합니까? 원래 질문을 Pacer의 정보로 업데이트했습니다. – boilers222

답변

0

코드에 중대한 문제가 있습니다. 당신은 오직 가 반환하는 세 가지 쿠키 중 하나가입니다. 세 가지를 모두 보존해야합니다. 다음 코드는 나중에 구현할 수있는 몇 가지 메모와 함께 구현할 수 있습니다.

public class PacerClient 
{ 
    private CookieContainer m_Cookies = new CookieContainer(); 
    public string Username { get; set; } 
    public string Password { get; set; } 
    public PacerClient(string username, string password) 
    { 
     this.Username = username; 
     this.Password = password; 
    } 
    public void Connect() 
    { 
     var client = new RestClient("https://pacer.login.uscourts.gov"); 
     client.CookieContainer = this.m_Cookies; 
     RestRequest request = new RestRequest("/cgi-bin/check-pacer-passwd.pl", Method.POST); 
     request.AddParameter("loginid", this.Username); 
     request.AddParameter("passwd", this.Password); 

     IRestResponse response = client.Execute(request); 

     if (response.Cookies.Count < 1) 
     { 
      throw new WebException("No cookies returned."); 
     } 
    } 
    public XmlDocument SearchParty(string partyName) 
    { 
     string requestUri = $"/dquery?download=1&dl_fmt=xml&party={partyName}"; 

     var client = new RestClient("https://pcl.uscourts.gov"); 
     client.CookieContainer = this.m_Cookies; 

     var request = new RestRequest(requestUri); 

     IRestResponse response = client.Execute(request); 

     if (!String.IsNullOrEmpty(response.Content)) 
     { 
      XmlDocument result = new XmlDocument(); 
      result.LoadXml(response.Content); 
      return result; 
     } 
     else return null; 
    } 
} 

그것은 당신이 페이와 함께 작업하고있는 전체 시간에 걸쳐 CookieContainer의 보류를 유지하는 가장 쉬운 방법.나는 그 기능을 클래스에 넣었으니이 대답으로 패키지하기가 좀 더 쉬워 지지만 원하는대로 구현할 수있다. 실제 오류 확인을하지 않았으므로 response.ResponseUri이 실제로 로그온 페이지가 아닌 검색 페이지이고 내용이 실제로 올바른 형식의 XML인지 확인하려고합니다.

나는이과 같이, 내 자신의 페이 계정을 사용하여 테스트했습니다 디버거 스크린 샷에서

PacerClient client = new PacerClient(Username, Password); 
client.Connect(); 
var document = client.SearchParty("Moncrief");