如何从Pacer.gov API提出案例请求?

我正在尝试向名为Pacer.gov的API发出请求。 我期待一个文件被退回,但我没有得到它。 有人可以帮我解决我所缺少的问题吗?

所以我的C#Rest调用如下所示:

(变量PacerSession是我得到的身份validationcookie(在@ jonathon-reinhart的帮助下);在这里阅读更多相关内容: 如何使用RestSharp将登录名和密码POST到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); 

如果我只是将urlhttps://pcl.uscourts.gov/dquery?download=1&dl_fmt=xml&party=Moncrief输入Chrome,我会收到一个XML文件。 当我查看IRestResponse时,我看不到任何看起来像文件的内容。 我的请求有什么问题,或者我收回文件,只需要知道如何检索它?

如果我直接在浏览器中使用URL,这是我回来的文件的一部分:

在此处输入图像描述

这是我在调试它时看到的VS并查看IRestResponse变量:

在此处输入图像描述

更新 – 2016年6月3日

收到了Pacer技术支持部门的回复:

在高级REST客户端中,您将看到HTTP 302响应(重定向到另一个页面)。 在普通浏览器中,自动跟踪重定向,而无需用户看到任何内容(即使在浏览器中的URL上)。 ARC不会自动跟随重定向到目标页面。 您可以在响应的标题中看到包含结果的目标URL。
如果您手动将此URL作为HTTP GET请求剪切并粘贴到ARC,您将获得XML结果。 我从未使用过C#,但通常会有一个与Web客户端关联的属性会强制客户端遵循重定向。

我尝试添加这个:

 client.FollowRedirects = true; 

但是当我调试这段代码时,我仍然没有看到xml文件:

 IRestResponse response = client.Execute(request); 

在此处输入图像描述

我如何获取文件? 我是否需要做一些事情才能从重定向到的URL中获取文件?

您的代码存在一个主要问题。 您只携带checp-pacer-passwd.pl返回的三个cookie中的checp-pacer-passwd.pl 。 你需要保留这三个。 以下代码是可能的实现,之后会有一些注释。

 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; } } 

在您与Pacer合作的整个过程中,最简单的方法就是保持CookieContainer 。 我将function包装到一个类中,只是为了让它更容易打包这个答案,但你可以随意实现它。 我没有进行任何真正的错误检查,所以你可能想要检查response.ResponseUri实际上是搜索页面而不是登录页面,并且内容实际上是格式良好的XML。

我用我自己的Pacer帐户测试了这个,如下:

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