MathGroup Archive 2009

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: WEB Import using "POST" instead of "GET"

  • To: mathgroup at smc.vnet.net
  • Subject: [mg103264] Re: [mg103255] WEB Import using "POST" instead of "GET"
  • From: "Scot T. Martin" <smartin at seas.harvard.edu>
  • Date: Fri, 11 Sep 2009 19:57:42 -0400 (EDT)
  • References: <200909111136.HAA05541@smc.vnet.net>

To my knowledge, you cannot (unfortunately) do this directly with Import 
or any other way with the direct built-in commands in Mathematica (maybe 
to come in version 8)? However, Mathematica has built-in Java, and you 
should be able to do it that way. I have not specifically tested POST in 
that exact configuration, but I have tested POST using a Java set up with 
webMathematica, and the Java-Mathematica interface works great. I 
therefore think it should work great with the built-in Mathematica 
Java---my only hesitation here is that I have not tested, and it's always 
possible that Mathematica's built-in Java capability does not have the 
exact same specifications or capabilities to incorporate java classes as 
the JSP server that runs webMathematica.

I'll post below the webMathematica code that I use. The <msp> tags are the 
way that Mathematica communicates with JSP. The important part of this 
code for trying to do directly within Java of Mathematica is

import="java.net.*,java.io.*"

If anyone in the forum can confirm that these are available in 
Mathematica's Java implementation, then you can definitely use this route 
to get to Mathematica-POST interactions. As I said, I am successfully 
doing this in the code below that interfaces Mathematica and Java using 
the JSP server of webMathematica.


CODE:


<%@ page language="java" import="java.net.*,java.io.*" %>
<%@ taglib uri="/webMathematica-taglib" prefix="msp" %>

<html>
<head>
<title>Get some data from AIM website</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF" text="#000000">

<h1>This page was loaded with a POST command.</h1>

<%
 	String data = URLEncoder.encode("wwwUsageType", "UTF-8") + "=" + 
URLEncoder.encode("calculation", "UTF-8");
 	data += "&" + URLEncoder.encode("wwwOutputMode", "UTF-8") + "=" + 
URLEncoder.encode("normal", "UTF-8");
 	data += "&" + URLEncoder.encode("wwwInputMode", "UTF-8") + "=" + 
URLEncoder.encode("interactive", "UTF-8");
 	data += "&" + URLEncoder.encode("interactive_type", "UTF-8") + "=" 
+ URLEncoder.encode("1", "UTF-8");
 	data += "&" + URLEncoder.encode("Model", "UTF-8") + "=" + 
URLEncoder.encode("ModelII", "UTF-8");
 	data += "&" + URLEncoder.encode("iCaseInorg", "UTF-8") + "=" + 
URLEncoder.encode("1", "UTF-8");
 	data += "&" + URLEncoder.encode("ExcludeWater", "UTF-8") + "=" + 
URLEncoder.encode("y", "UTF-8");
 	data += "&" + URLEncoder.encode("OrgFileName", "UTF-8") + "=" + 
URLEncoder.encode("nullname", "UTF-8");
 	data += "&" + URLEncoder.encode("hydroxide", "UTF-8") + "=" + 
URLEncoder.encode("0.D0", "UTF-8");
 	data += "&" + URLEncoder.encode("ammonia", "UTF-8") + "=" + 
URLEncoder.encode("0.D0", "UTF-8");
 	data += "&" + URLEncoder.encode("water_dissoc", "UTF-8") + "=" + 
URLEncoder.encode("0", "UTF-8");
 	data += "&" + URLEncoder.encode("pressure", "UTF-8") + "=" + 
URLEncoder.encode("1.D0", "UTF-8");
 	data += "&" + URLEncoder.encode("volume", "UTF-8") + "=" + 
URLEncoder.encode("1.D0", "UTF-8");
 	data += "&" + URLEncoder.encode("h2og", "UTF-8") + "=" + 
URLEncoder.encode("1", "UTF-8");
 	data += "&" + URLEncoder.encode("hno3g", "UTF-8") + "=" + 
URLEncoder.encode("4", "UTF-8");
 	data += "&" + URLEncoder.encode("hclg", "UTF-8") + "=" + 
URLEncoder.encode("4", "UTF-8");
 	data += "&" + URLEncoder.encode("h2so4g", "UTF-8") + "=" + 
URLEncoder.encode("4", "UTF-8");
 	data += "&" + URLEncoder.encode("nh3g", "UTF-8") + "=" + 
URLEncoder.encode("4", "UTF-8");
 	data += "&" + URLEncoder.encode("temperature", "UTF-8") + "=" + 
URLEncoder.encode("298.15", "UTF-8");
 	data += "&" + URLEncoder.encode("water_var", "UTF-8") + "=" + 
URLEncoder.encode(".80", "UTF-8");
 	data += "&" + URLEncoder.encode("hydrogen", "UTF-8") + "=" + 
URLEncoder.encode("", "UTF-8");
 	data += "&" + URLEncoder.encode("ammonium", "UTF-8") + "=" + 
URLEncoder.encode("2", "UTF-8");
 	data += "&" + URLEncoder.encode("sulphate", "UTF-8") + "=" + 
URLEncoder.encode("1", "UTF-8");
 	data += "&" + URLEncoder.encode("nitrate", "UTF-8") + "=" + 
URLEncoder.encode("", "UTF-8");
 	data += "&" + URLEncoder.encode("nCompounds", "UTF-8") + "=" + 
URLEncoder.encode("0", "UTF-8");
 	data += "&" + URLEncoder.encode("nh42so4", "UTF-8") + "=" + 
URLEncoder.encode("4", "UTF-8");

 	URL url = new URL("http://URL REDACTED HERE FOR 
PRIVACY.com/cgi-bin/eaim25");

 	// POST to website
 	URLConnection conn = url.openConnection();
 	conn.setDoOutput(true);
 	OutputStreamWriter wr = new 
OutputStreamWriter(conn.getOutputStream());
         wr.write(data);
         wr.flush();

 	// READ from website
 	String result = null;
 	StringBuffer sb = new StringBuffer();
 	String line;

 	BufferedReader rd = new BufferedReader(new 
InputStreamReader(conn.getInputStream()));
 	while ((line = rd.readLine()) != null)
 	{
 	sb.append((line+"\r")); // ADD <CR> to each line
 	}
 	wr.close();
 	rd.close();

 	result = sb.toString();
%>

<hr>

<h1>The page as produced by Java Server Page</h1>

<%= result %>

<hr>

<h1>The page as produced when imported into Mathematica</h1>

     <msp:allocateKernel>

     <msp:set name="postresult" objectValue="<%= result %>" />

     <msp:evaluate>
         postresult
     </msp:evaluate>

<hr>

<h1>The page as produced after some manipulation in Mathematica</h1>

     <msp:evaluate>
         test=StringSplit[postresult,"\r"]
     </msp:evaluate>

     <msp:evaluate>
         "There are "<>ToString[Length[test]]<>" lines in the output 
(counted by Mathematica)"
     </msp:evaluate>

     </msp:allocateKernel>

</body>
</html>


On Fri, 11 Sep 2009, Nacho wrote:

> Hello Mathematica users.
>
> I would like to access to some Web data using Import[], but the web I
> need uses HTTP POST to give some variables, and not GET.
>
> Is there any way to force Mathematica to use POST, with some provided
> variables?
>
> Thank you.
>
>
>


  • Prev by Date: Re: Credit card balance transfer fee problem
  • Next by Date: Re: Changing style of autogenerated messages in Mathematica 7
  • Previous by thread: WEB Import using "POST" instead of "GET"
  • Next by thread: Re: WEB Import using "POST" instead of "GET"