How to get json page using httpunit - java

I am using web client. and login successfully through web client. but when i send second request for getting data . I got an Exception
com.gargoylesoftware.htmlunit.UnexpectedPage#6d8d73`
but when i pass url thruogh brouser i got a data Json format.
Code:
webClient.getPage("http://ajax/stream/refresh-box?r=new&id=2323222&")
Thx in advanced

this is the which is reading different content type through web client
Page page = webClient.getPage(url);
System.out.println(page);
WebResponse response = page.getWebResponse();
if (response.getContentType().equals("application/json"))
{
pagesource = response.getContentAsString();
System.out.println(pagesource);
}

This URL is returning an error, if I type it in the browser, check it again:
"http://ajax/stream/refresh-box?r=new&id=2323222&"
BTW, why does it finish with & sign while there is no additional parameter?
I removed the & sign and still I get no page exception in the browser.

Related

Getting the actual text response of a web page in java

I'm using java and trying to get the content of a website so that I can analyze the text on the page, however every time that I "GET" a response from the server, it is from a login page rather than the website page that I am looking at.
I am logged into the website on all my browsers, but my application is not able to see the page as if it were me.
I also tried to use an API called "Yandex" --> http://api.yandex.com/rca/
as a work-around. But when I call the page from Yandex (which would get its content) I only see information based on the login page returned.
Can anyone give me a direction to investigate? I would like to be able to get one item on the page of a website that I work for, but it doesn't seem possible.
m_strseedpath = "http://myUrl.com/mypage.html"; //not https
URLConnection connection = new URL("http://rca.yandex.com/?key={MyActualKeyNotThisText}&url=" + m_strSeedUrlPath + "").openConnection();
connection.setRequestProperty("Accept-Charset", "UTF-8");
InputStream response = connection.getInputStream();
StringWriter writer = new StringWriter();
IOUtils.copy(response, writer, "UTF-8");
String strString = writer.toString();
System.out.println(strString);
The URLConnection object will connect to the page but in a different session. You would have to programmaticaly log in from your Java code.
Create a URLConnection object to the login page, POST the user name and password, receive the content getting the InputStream from the URLConnection object, and finally create a new connection to the page you wish to analyze. You'd have to also work with cookies in order to view the second page.
Hope this helps!
The URL that you are trying to access has access restricted via login. Even if you are logged in via your browser you wont be able to access the page from your Java application because the browser has an Authenticated Session with the target website. The same session is not visible to your Java Application.
You would have to research into the ways to login to the website and then get the page content.

authenticate user from java program - java

I am trying to crawl a web-page which requires authentication. I am able to access that page in browser when I am logged in, using JSoup http://jsoup.org/ library to parse HTML pages.
public static void main(String[] args) throws IOException {
// need http protocol
Document doc = Jsoup.connect("http://www.secinfo.com/$/SEC/Filing.asp?T=r643.91Dx_2nx").get();
// get page title
String title = doc.title();
System.out.println("title : " + title);
// get all links
Elements links = doc.select("a");
for (Element link : links) {
// get the value from href attribute
System.out.println("\nlink : " + link.attr("href"));
}
System.out.println();
}
Output :
title : SEC Info - Sign In
This is getting the content of the sign in page not the actual URL i am passing. I am registered on secinfo.com and while running this program I am logged in from my default browser Firefox.
This will not help even if you are logged in using your default browser. Your java program is a separate process and it doesn't share the screen with your browsers.
On the other hand secinfo needs an authentication and JSoup allows you to pass authentication details.
It works for me when I pass the authentication details:
Please check this answer (Jsoup connection with basic access authentication)
Jsoup's connect() also support a post() with method chaining, if your target site's login mechanism work with POST request:
Document doc = Jsoup.connect("url")
.data("aUserName", "myUserName")
.data("aPassword", "myPassword")
.userAgent("Mozilla")
.timeout(3000)
.post();
But what if the page you are trying to get requires subsequent cookie sending for each request ? Try to use HttpURLConnection with POST and read the cookie from HTTP connection response header. HttpClient will make this task easier for you. Use the library to fetch a web page as string and then pass the string to jsoup.parse() function to get the document.
You have to sign in with a post command and preserve the cookies you get back. That is where you session info is stored. I wrote an example here: Jsoup can't Login on Page.
The website in the example is an exception it sets the session cookie already on the login page. You can leave that step if it is work for you.
The exact post command can be different from website to website. You have to dig it out from the html or you have to install a plugin to your browser and intercept the post commands.

Do Web services Redirect the data to the source requested in java

I had created a web service where it receives the data and store it in database. For confirmation of storage to user i had shown the stored data as response in the same page as (where web service is processing) JSON output.
Now i have a doubt , Do the response can be redirected to the request page.
For your better understanding,
A user uploading the data from a html file (upload.html).
Now the web service will store the data in database (upload.java) and shows output as JSON in same page (current am using this way)
Can i take the response JSON output back to the html (upload.html) and show the JSON output
Is this way possible.
You are posting/sending data of user to server and then again you want to redirect response to the user. Why?
When user submits the data you already have it. So just format it and show appropriate message to the user. Showing message after redirection doesn't add any value unless you want to show some message which is coming from server.
Edit
Web service tutorial
Check service code in above link; it returns String. Similarly you need to modify your service to return appropriate object.
public String hello(#WebParam(name = "name") String txt) {
return "Hello " + txt + " !";
}

Why is Java Servlet response.Redirect causing browser to parse requested HTML as URL

I am attempting to send a response redirect at the end of a Java servlet post request:
session.setAttribute("token", token);
String redirectUrl = response.encodeRedirectURL(MYSITE_URL + "extras.html");
response.sendRedirect(redirectUrl)
Stepping through the code redirectUrl equates to "http://localhost:8080/mysite/extras.html". The browswer however is attempting to request the following url, which to the observant is acutally the html of the document I'm requesting.
http://localhost:8080/mysite/%3C!DOCTYPE%20html%3E%20%3Chtml%3E%20%20%20%20%20%3Chead%3E%20%20%20%20%20%20%20%20%20%3Ctitle%3EBet%20Ya%20Friends%3C/title%3E%20%20%20%20%20%20%20%20%20%3Cmeta%20name=%22viewport%22%20content=%22width=device-width,%20initial-scale=1%22%3E%20%20%20%20%20%20%20%20%20%3Clink%20rel=%22stylesheet%22%20href=%22http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.css%22%20/%3E%20%20%20%20%20%20%20%20%3Cscript%20src=%22http://code.jquery.com/jquery-1.8.2.min.js%22%3E%3C/script%3E%20%20%20%20%20%20%20%20%3Cscript%20src=%22http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.js%22%3E%3C/script%3E%20%20%20%20%3C/head%3E%20%20%20%20%20%3Cbody%3E%20%20%20%20%20%20%20%20%20%3Cdiv%20data-role=%22page%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20data-role=%22header%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ch1%3EBet%20Ya%20Friends%3C/h1%3E%20%20%20%20%20%20%20%20%20%20%20%20%3C/div%3E%3C!--%20/header%20--%3E%20%20%20%20%20%20%20%20%20%20%20%20%3Cul%20data-role=%22listview%22%20data-inset=%22true%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cli%3E%3Cdiv%3EView%20Friends%3C/div%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cspan%20class=%22ui-li-count%22%3E6%3C/span%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cul%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cli%3E%3Ca%20href=%22index.html%22%3ECanary%3C/a%3E%3C/li%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cli%3E%3Ca%20href=%22index.html%22%3ECat%3C/a%3E%3C/li%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cli%3E%3Ca%20href=%22index.html%22%3EDog%3C/a%3E%3C/li%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cli%3E%3Ca%20href=%22index.html%22%3EGerbil%3C/a%3E%3C/li%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cli%3E%3Ca%20href=%22index.html%22%3EIguana%3C/a%3E%3C/li%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cli%3E%3Ca%20href=%22index.html%22%3EMouse%3C/a%3E%3C/li%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C/ul%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C/li%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cli%3E%3Cdiv%3EMake%20A%20Bet%3C/div%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cp%20class=%22ui-li-count%22%3E6%3C/p%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cul%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cli%3E%3Ca%20href=%22index.html%22%3EChicken%3C/a%3E%3C/li%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cli%3E%3Ca%20href=%22index.html%22%3ECow%3C/a%3E%3C/li%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cli%3E%3Ca%20href=%22index.html%22%3EDuck%3C/a%3E%3C/li%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cli%3E%3Ca%20href=%22index.html%22%3EHorse%3C/a%3E%3C/li%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cli%3E%3Ca%20href=%22index.html%22%3EPig%3C/a%3E%3C/li%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cli%3E%3Ca%20href=%22index.html%22%3ESheep%3C/a%3E%3C/li%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C/ul%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C/li%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cli%3E%3Cdiv%3EBet%20History%3C/div%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cp%20class=%22ui-li-count%22%3E18%3C/p%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cul%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cli%3E%3Ca%20href=%22index.html%22%3EAardvark%3C/a%3E%3C/li%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cli%3E%3Ca%20href=%22index.html%22%3EAlligator%3C/a%3E%3C/li%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cli%3E%3Ca%20href=%22index.html%22%3EAnt%3C/a%3E%3C/li%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cli%3E%3Ca%20href=%22index.html%22%3EBear%3C/a%3E%3C/li%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cli%3E%3Ca%20href=%22index.html%22%3EBeaver%3C/a%3E%3C/li%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cli%3E%3Ca%20href=%22index.html%22%3ECougar%3C/a%3E%3C/li%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cli%3E%3Ca%20href=%22index.html%22%3EDingo%3C/a%3E%3C/li%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cli%3E%3Ca%20href=%22index.html%22%3EEagle%3C/a%3E%3C/li%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cli%3E%3Ca%20href=%22index.html%22%3EElephant%3C/a%3E%3C/li%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cli%3E%3Ca%20href=%22index.html%22%3EFerret%3C/a%3E%3C/li%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cli%3E%3Ca%20href=%22index.html%22%3EFrog%3C/a%3E%3C/li%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cli%3E%3Ca%20href=%22index.html%22%3EGiraffe%3C/a%3E%3C/li%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cli%3E%3Ca%20href=%22index.html%22%3ELion%3C/a%3E%3C/li%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cli%3E%3Ca%20href=%22index.html%22%3EMonkey%3C/a%3E%3C/li%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cli%3E%3Ca%20href=%22index.html%22%3EPanda%20bear%3C/a%3E%3C/li%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cli%3E%3Ca%20href=%22index.html%22%3EPolar%20bear%3C/a%3E%3C/li%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cli%3E%3Ca%20href=%22index.html%22%3ETiger%3C/a%3E%3C/li%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cli%3E%3Ca%20href=%22index.html%22%3EZebra%3C/a%3E%3C/li%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C/ul%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C/li%3E%20%20%20%20%20%20%20%20%20%20%20%20%3C/ul%3E%20%20%20%20%20%20%20%20%3C/div%3E%3C!--%20/page%20--%3E%3C!--%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ca%20href=%22#%22%20onclick=%22getUserFriends%28%29;%22%3EGet%20friends%3C/a%3E%3Cbr%3E%20%20%20%20%20%20%20%20%20%3Cdiv%20id=%22user-friends%22%3E%3C/div%3E%20%20%20%20%20%20%20%20%20%3Cscript%3E%20%20%20%20%20%20%20%20%20function%20getUserFriends%28%29%20{%20%20%20%20%20%20%20%20%20%20%20FB.api%28%27/me/friends&fields=name,picture%27,%20function%28response%29%20{%20%20%20%20%20%20%20%20%20%20%20%20%20console.log%28%27Got%20friends:%20%27,%20response%29;%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28!response.error%29%20{%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20markup%20=%20%27%27;%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20friends%20=%20response.data;%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20for%20%28var%20i=0;%20i%20%3C%20friends.length%20&&%20i%20%3C%2025;%20i++%29%20{%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20friend%20=%20friends[i];%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20markup%20+=%20%27%3Cimg%20src=%22%27%20+%20friend.picture%20+%20%27%22%3E%20%27%20+%20friend.name%20+%20%27%3Cbr%3E%27;%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20}%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20document.getElementById%28%27user-friends%27%29.innerHTML%20=%20markup;%20%20%20%20%20%20%20%20%20%20%20%20%20}%20%20%20%20%20%20%20%20%20%20%20}%29;%20%20%20%20%20%20%20%20%20}%20%20%20%20%20%20%20%20%20%3C/script%3E--%3E%20%20%20%20%3C/body%3E%3C/html%3E
My question is, why? Why is the actual html document being requested rather than the url? And why is encodeURL not encoding the session in the URL?
You mentioned that MYSITE_URL is
"localhost:8080/mysite/"
. That could be the problem. Its missing http in the beginning. Can you modify MYSITE_URL to
"http://localhost:8080/mysite/"
and then try ?

Using ajax to call a servlet

As I understand it and have used it, AJAX is used to make requests from the client to the server and to then update a HTML DIV on the client with new content.
However, I want to use AJAX from a client to a servlet to verify the existence of a URL. If the result is bad, I can set an error message in the servlet and return it to the client page for display.
But does anyone know if, in the case of a positive result, I can have my servlet automatically display another (the next) page to the user? Or should that request be triggered by Javascript on the client when the positive results is received.
Thanks
Mr Morgan.
Since your ajax call is executed in the background the result returned by the servlet, returns to the ajax call, which should then act accordingly to the result. e.g. trigger the display of another page. (Which could have been already in the ajax response and then you can show it in a div or iframe or ...)
As per the W3 specification, XMLHttpRequest forces the webbrowser to the new location when the server returns a fullworthy 301/302 redirect and the Same Origin Policy of the new request is met. This however fails in certain browsers like certain Google Chrome versions.
To achieve best crossbrowser result, also when the redirected URL doesn't met the Same Origin Policy rules, you would like to change the location in JavaScript side instead. You can eventually let your servlet send the status and the desired new URL. E.g.
Map<String, Object> map = new HashMap<String, Object>();
map.put("redirect", true);
map.put("location", "http://stackoverflow.com");
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
resposne.getWriter().write(new Gson().toJson(map));
(that Gson is by the way Google Gson which eases converting Java Objects to JSON)
and then in the Ajax success callback handler in JS:
if (response.redirect) {
window.location = response.location;
}
In your success call back (on client), set the self.location.href to new URL.
HTML is a "pull" technology: Nothing gets displayed in the browser that the browser hasn't previously requested from the server.
Hence, you don't have a chance to "make the servlet automatically display a different page." You have to talk your browser (from JavaScript) into requesting a different page.

Categories

Resources