CrossRef / rest-api-doc

Documentation for Crossref's REST API. For questions or suggestions, see https://community.crossref.org/
Other
724 stars 269 forks source link

Error thrown when using curl to query CrossRef API #60

Closed callahanchris closed 9 years ago

callahanchris commented 9 years ago

Following along in the examples on rest_api.md, it seems that there is an error message being thrown when sending JSON data to the API via curl. Running the following command:

curl -X GET -H "Content-Type: application/json" -d '{"query": "renear -ontologies"}' http://api.crossref.org/works

gives the following output:

<!DOCTYPE html>
<html><head><title>Ring: Stacktrace</title><style type="text/css">/*
Copyright (c) 2008, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
version: 2.6.0
*/
html{color:#000;background:#FFF;}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}li{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}q:before,q:after{content:'';}abbr,acronym{border:0;font-variant:normal;}sup{vertical-align:text-top;}sub{vertical-align:text-bottom;}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit;}input,textarea,select{*font-size:100%;}legend{color:#000;}del,ins{text-decoration:none;}

h3.info {
 font-size: 1.6em; 
 margin-left: 1em;
 padding-top: .5em;
 padding-bottom: .5em;
}

table.trace {
  font-size: 1.1em;
  margin-left: 1em;
  background: lightgrey;
}

table.trace tr {
  line-height: 1.4em;
}

table.trace td.method {
  padding-left: .5em;
  text-aligh: left;
}

table.trace td.source {
  text-align: right;
}
</style></head><body><div id="exception"><h3 class="info">java.io.EOFException: JSON error (end-of-file)</h3><table class="trace"><tbody><tr><td class="source">json.clj:178</td><td class="method">clojure.data.json/-read</td></tr><tr><td class="source">json.clj:266</td><td class="method">clojure.data.json/read</td></tr><tr><td class="source">RestFn.java:439</td><td class="method">clojure.lang.RestFn.invoke</td></tr><tr><td class="source">parameters.clj:17</td><td class="method">cayenne.api.v1.parameters/get-parameters</td></tr><tr><td class="source">RestFn.java:410</td><td class="method">clojure.lang.RestFn.invoke</td></tr><tr><td class="source">query.clj:139</td><td class="method">cayenne.api.v1.query/-&gt;query-context</td></tr><tr><td class="source">RestFn.java:410</td><td class="method">clojure.lang.RestFn.invoke</td></tr><tr><td class="source">routes.clj:202</td><td class="method">cayenne.api.v1.routes/works-resource[fn]</td></tr><tr><td class="source">core.clj:190</td><td class="method">liberator.core/run-handler</td></tr><tr><td class="source">core.clj:244</td><td class="method">liberator.core/handle-ok</td></tr><tr><td class="source">core.clj:103</td><td class="method">liberator.core/decide</td></tr><tr><td class="source">core.clj:250</td><td class="method">liberator.core/multiple-representations?</td></tr><tr><td class="source">core.clj:103</td><td class="method">liberator.core/decide</td></tr><tr><td class="source">core.clj:317</td><td class="method">liberator.core/put-to-existing?</td></tr><tr><td class="source">core.clj:103</td><td class="method">liberator.core/decide</td></tr><tr><td class="source">core.clj:320</td><td class="method">liberator.core/post-to-existing?</td></tr><tr><td class="source">core.clj:103</td><td class="method">liberator.core/decide</td></tr><tr><td class="source">core.clj:329</td><td class="method">liberator.core/method-patch?</td></tr><tr><td class="source">core.clj:103</td><td class="method">liberator.core/decide</td></tr><tr><td class="source">core.clj:332</td><td class="method">liberator.core/method-delete?</td></tr><tr><td class="source">core.clj:103</td><td class="method">liberator.core/decide</td></tr><tr><td class="source">core.clj:352</td><td class="method">liberator.core/if-modified-since-exists?</td></tr><tr><td class="source">core.clj:103</td><td class="method">liberator.core/decide</td></tr><tr><td class="source">core.clj:369</td><td class="method">liberator.core/if-none-match-exists?</td></tr><tr><td class="source">core.clj:103</td><td class="method">liberator.core/decide</td></tr><tr><td class="source">core.clj:389</td><td class="method">liberator.core/if-unmodified-since-exists?</td></tr><tr><td class="source">core.clj:103</td><td class="method">liberator.core/decide</td></tr><tr><td class="source">core.clj:403</td><td class="method">liberator.core/if-match-exists?</td></tr><tr><td class="source">core.clj:103</td><td class="method">liberator.core/decide</td></tr><tr><td class="source">core.clj:406</td><td class="method">liberator.core/exists?</td></tr><tr><td class="source">core.clj:103</td><td class="method">liberator.core/decide</td></tr><tr><td class="source">core.clj:409</td><td class="method">liberator.core/processable?</td></tr><tr><td class="source">core.clj:103</td><td class="method">liberator.core/decide</td></tr><tr><td class="source">core.clj:428</td><td class="method">liberator.core/accept-encoding-exists?</td></tr><tr><td class="source">core.clj:103</td><td class="method">liberator.core/decide</td></tr><tr><td class="source">core.clj:441</td><td class="method">liberator.core/accept-charset-exists?</td></tr><tr><td class="source">core.clj:103</td><td class="method">liberator.core/decide</td></tr><tr><td class="source">core.clj:455</td><td class="method">liberator.core/accept-language-exists?</td></tr><tr><td class="source">core.clj:103</td><td class="method">liberator.core/decide</td></tr><tr><td class="source">core.clj:465</td><td class="method">liberator.core/media-type-available?</td></tr><tr><td class="source">core.clj:103</td><td class="method">liberator.core/decide</td></tr><tr><td class="source">core.clj:468</td><td class="method">liberator.core/accept-exists?</td></tr><tr><td class="source">core.clj:103</td><td class="method">liberator.core/decide</td></tr><tr><td class="source">core.clj:485</td><td class="method">liberator.core/is-options?</td></tr><tr><td class="source">core.clj:103</td><td class="method">liberator.core/decide</td></tr><tr><td class="source">core.clj:488</td><td class="method">liberator.core/valid-entity-length?</td></tr><tr><td class="source">core.clj:103</td><td class="method">liberator.core/decide</td></tr><tr><td class="source">core.clj:491</td><td class="method">liberator.core/known-content-type?</td></tr><tr><td class="source">core.clj:103</td><td class="method">liberator.core/decide</td></tr><tr><td class="source">core.clj:493</td><td class="method">liberator.core/valid-content-header?</td></tr><tr><td class="source">core.clj:103</td><td class="method">liberator.core/decide</td></tr><tr><td class="source">core.clj:496</td><td class="method">liberator.core/allowed?</td></tr><tr><td class="source">core.clj:103</td><td class="method">liberator.core/decide</td></tr><tr><td class="source">core.clj:499</td><td class="method">liberator.core/authorized?</td></tr><tr><td class="source">core.clj:103</td><td class="method">liberator.core/decide</td></tr><tr><td class="source">core.clj:502</td><td class="method">liberator.core/malformed?</td></tr><tr><td class="source">core.clj:103</td><td class="method">liberator.core/decide</td></tr><tr><td class="source">core.clj:505</td><td class="method">liberator.core/method-allowed?</td></tr><tr><td class="source">core.clj:103</td><td class="method">liberator.core/decide</td></tr><tr><td class="source">core.clj:508</td><td class="method">liberator.core/uri-too-long?</td></tr><tr><td class="source">core.clj:103</td><td class="method">liberator.core/decide</td></tr><tr><td class="source">core.clj:511</td><td class="method">liberator.core/known-method?</td></tr><tr><td class="source">core.clj:103</td><td class="method">liberator.core/decide</td></tr><tr><td class="source">core.clj:514</td><td class="method">liberator.core/service-available?</td></tr><tr><td class="source">core.clj:601</td><td class="method">liberator.core/run-resource</td></tr><tr><td class="source">routes.clj:197</td><td class="method">cayenne.api.v1.routes/works-resource</td></tr><tr><td class="source">response.clj:27</td><td class="method">compojure.response/eval16612[fn]</td></tr><tr><td class="source">response.clj:10</td><td class="method">compojure.response/eval16573[fn]</td></tr><tr><td class="source">core.clj:93</td><td class="method">compojure.core/make-route[fn]</td></tr><tr><td class="source">core.clj:39</td><td class="method">compojure.core/if-route[fn]</td></tr><tr><td class="source">core.clj:24</td><td class="method">compojure.core/if-method[fn]</td></tr><tr><td class="source">core.clj:106</td><td class="method">compojure.core/routing[fn]</td></tr><tr><td class="source">core.clj:2443</td><td class="method">clojure.core/some</td></tr><tr><td class="source">core.clj:106</td><td class="method">compojure.core/routing</td></tr><tr><td class="source">RestFn.java:139</td><td class="method">clojure.lang.RestFn.applyTo</td></tr><tr><td class="source">core.clj:619</td><td class="method">clojure.core/apply</td></tr><tr><td class="source">core.clj:111</td><td class="method">compojure.core/routes[fn]</td></tr><tr><td class="source">core.clj:106</td><td class="method">compojure.core/routing[fn]</td></tr><tr><td class="source">core.clj:2443</td><td class="method">clojure.core/some</td></tr><tr><td class="source">core.clj:106</td><td class="method">compojure.core/routing</td></tr><tr><td class="source">RestFn.java:139</td><td class="method">clojure.lang.RestFn.applyTo</td></tr><tr><td class="source">core.clj:619</td><td class="method">clojure.core/apply</td></tr><tr><td class="source">core.clj:111</td><td class="method">compojure.core/routes[fn]</td></tr><tr><td class="source">core.clj:106</td><td class="method">compojure.core/routing[fn]</td></tr><tr><td class="source">core.clj:2443</td><td class="method">clojure.core/some</td></tr><tr><td class="source">core.clj:106</td><td class="method">compojure.core/routing</td></tr><tr><td class="source">RestFn.java:139</td><td class="method">clojure.lang.RestFn.applyTo</td></tr><tr><td class="source">core.clj:619</td><td class="method">clojure.core/apply</td></tr><tr><td class="source">core.clj:111</td><td class="method">compojure.core/routes[fn]</td></tr><tr><td class="source">keyword_params.clj:27</td><td class="method">ring.middleware.keyword-params/wrap-keyword-params[fn]</td></tr><tr><td class="source">nested_params.clj:65</td><td class="method">ring.middleware.nested-params/wrap-nested-params[fn]</td></tr><tr><td class="source">params.clj:55</td><td class="method">ring.middleware.params/wrap-params[fn]</td></tr><tr><td class="source">route.clj:73</td><td class="method">cayenne.api.route/wrap-cors[fn]</td></tr><tr><td class="source">expose.clj:94</td><td class="method">metrics.ring.expose/expose-metrics-as-json[fn]</td></tr><tr><td class="source">instrument.clj:44</td><td class="method">metrics.ring.instrument/instrument[fn]</td></tr><tr><td class="source">(Unknown Source)</td><td class="method">metrics.ring.instrument.proxy$java.lang.Object$Callable$f8c5758f.call</td></tr><tr><td class="source">Timer.java:91</td><td class="method">com.yammer.metrics.core.Timer.time</td></tr><tr><td class="source">instrument.clj:43</td><td class="method">metrics.ring.instrument/instrument[fn]</td></tr><tr><td class="source">ring.clj:18</td><td class="method">heartbeat.ring/wrap-heartbeat[fn]</td></tr><tr><td class="source">stacktrace.clj:79</td><td class="method">ring.middleware.stacktrace/wrap-stacktrace-web[fn]</td></tr><tr><td class="source">conneg.clj:51</td><td class="method">cayenne.api.conneg/wrap-accept[fn]</td></tr><tr><td class="source">RingHandler.java:91</td><td class="method">org.httpkit.server.HttpHandler.run</td></tr><tr><td class="source">Executors.java:471</td><td class="method">java.util.concurrent.Executors$RunnableAdapter.call</td></tr><tr><td class="source">FutureTask.java:262</td><td class="method">java.util.concurrent.FutureTask.run</td></tr><tr><td class="source">ThreadPoolExecutor.java:1145</td><td class="method">java.util.concurrent.ThreadPoolExecutor.runWorker</td></tr><tr><td class="source">ThreadPoolExecutor.java:615</td><td class="method">java.util.concurrent.ThreadPoolExecutor$Worker.run</td></tr><tr><td class="source">Thread.java:744</td><td class="method">java.lang.Thread.run</td></tr></tbody></table></div></body></html>

The same query works as intended when inlined into the URL:

curl http://api.crossref.org/works?query=renear+-ontologies

And it also works as intended in this node script:

var request = require('request');

request.get({
  url: 'http://api.crossref.org/works',
  headers: { 'Content-Type': 'application/json' },
  qs: {
    query: 'renear -ontologies'
  }
}, function(err, resp, body) {
  console.log(body);
});
stuchalk commented 8 years ago

This may be an issue with the script sending the command not including the complete path to curl in the string that it sends. I have to do that in PHP...