Use
curlPerform(url = 'http://pubchem.ncbi.nlm.nih.gov/pug/pug.cgi',
postfields = q)
That gives me:
<PCT-Data>
<PCT-Data_output>
<PCT-OutputData>
<PCT-OutputData_status>
<PCT-Status-Message>
<PCT-Status-Message_status>
<PCT-Status value="running"/>
</PCT-Status-Message_status>
</PCT-Status-Message>
</PCT-OutputData_status>
<PCT-OutputData_output>
<PCT-OutputData_output_waiting>
<PCT-Waiting>
<PCT-Waiting_reqid>31406321645402938</PCT-Waiting_reqid>
</PCT-Waiting>
</PCT-OutputData_output_waiting>
</PCT-OutputData_output>
</PCT-OutputData>
</PCT-Data_output>
</PCT-Data>
Rajarshi Guha wrote:> Hi, I am trying to use a CGI service (Pubchem PUG) via RCurl and am
> running into a problem where the data must be supplied via POST - but I
> don't know the keyword for the argument.
>
> The data to be sent is an XML fragment. I can do this via the command
> line using curl: I save the XML string to a file called query.xml and
> then do
>
> curl -d @query.xml "http://pubchem.ncbi.nlm.nih.gov/pug/pug.cgi"
>
> I get the expected response. More importantly, the verbose option shows:
>
>> Accept: */*
>> Content-Length: 1227
>> Content-Type: application/x-www-form-urlencoded
>
> However, when I try to do this via RCurl, the data doesn't seem to get
> sent:
>
> q <- "<PCT-Data> <PCT-Data_input>
<PCT-InputData>
> <PCT-InputData_query> <PCT-Query>
> <PCT-Query_type> <PCT-QueryType>
> <PCT-QueryType_qas>
> <PCT-QueryActivitySummary>
> <PCT-QueryActivitySummary_output
>
value=\"summary-table\">0</PCT-QueryActivitySummary_output>
> <PCT-QueryActivitySummary_type
>
value=\"assay-central\">0</PCT-QueryActivitySummary_type>
> <PCT-QueryActivitySummary_scids>
> <PCT-QueryUids>
> <PCT-QueryUids_ids>
> <PCT-ID-List>
> <PCT-ID-List_db>pccompound</PCT-ID-List_db>
> <PCT-ID-List_uids>
> <PCT-ID-List_uids_E>3243128</PCT-ID-List_uids_E>
> </PCT-ID-List_uids>
> </PCT-ID-List>
> </PCT-QueryUids_ids>
> </PCT-QueryUids>
> </PCT-QueryActivitySummary_scids>
> </PCT-QueryActivitySummary> </PCT-QueryType_qas>
> </PCT-QueryType> </PCT-Query_type>
</PCT-Query>
> </PCT-InputData_query> </PCT-InputData>
</PCT-Data_input></PCT-Data>"
>
>> postForm(url, q, style="post", .opts = list(verbose=TRUE))
> * About to connect() to pubchem.ncbi.nlm.nih.gov port 80 (#0)
> * Trying 130.14.29.110... * connected
> * Connected to pubchem.ncbi.nlm.nih.gov (130.14.29.110) port 80 (#0)
>> POST /pug/pug.cgi HTTP/1.1
> Host: pubchem.ncbi.nlm.nih.gov
> Accept: */*
> Content-Length: 0
> Content-Type: application/x-www-form-urlencoded
>
> As you can see, the data in q doesn't seem to get sent (content-length
> 0).
>
> Does anybody have any suggestions as to why the call to postForm
doesn't
> work, but the command line call does?
>
> Thanks,
>
> ----------------------------------------------------
> Rajarshi Guha | NIH Chemical Genomics Center
> http://www.rguha.net | http://ncgc.nih.gov
> ----------------------------------------------------
> Q: Why did the mathematician name his dog "Cauchy"?
> A: Because he left a residue at every pole.
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.