JSOUP:设置表单数据

问题描述:

我正在创建一个使用JSOUP的JAVA程序。这是我想到的:JSOUP:设置表单数据

我想使用WordNet(http://wordnetweb.princeton.edu/perl/webwn)。 我有一个基本的形式,用户可以输入一个字符串。它会检查字符串是否是英文字典中的一个单词。 当您提交表单时,URL更改。我使用这个URL。然后我检查一下只有当它不是一个词时才出现的某个h3标签。

我的问题是能够填写表格并使用JSOUP提交它,并获取提交所需的URL。

这里是形式

<form method="get" action="webwn" enctype="multipart/form-data" name="f"> 
Word to search for: 
<input type="text" name="s" maxlength="500"> 
<input type="submit" name="sub" value="Search WordNet"> 
<input type="hidden" name="o2" value=""> 
<input type="hidden" name="o0" value="1"> 
<input type="hidden" name="o8" value="1"> 
<input type="hidden" name="o1" value="1"> 
<input type="hidden" name="o7" value=""> 
<input type="hidden" name="o5" value=""> 
<input type="hidden" name="o9" value=""> 
<input type="hidden" name="o6" value=""> 
<input type="hidden" name="o3" value="">  
<input type="hidden" name="o4" value=""> 
<input type="hidden" name="h" value=""> 
</form> 

我不知道该怎么办。这是我坚持的唯一部分。 我想这到目前为止,但它不会做任何事情

public static String getUrl(String search) throws IOException{ 
     String url = "http://wordnetweb.princeton.edu/perl/webwn"; 
     Document doc = Jsoup.connect(url) 
       .data("S", search) 
       .data("o2", "") 
       .data("o0", "1") 
       .data("o8", "1") 
       .data("o1", "1") 
       .data("o7", "") 
       .data("o5", "") 
       .data("o9", "") 
       .data("o6", "") 
       .data("o3", "") 
       .data("o4", "") 
       .data("h", "") 
       .post(); 
     String newURL = doc.location().toString(); 
     System.out.println(newURL); 
     return (newURL); 
} 

你可以只搜索你想要通过操纵URL的端点:

http://wordnetweb.princeton.edu/perl/webwn?s=和连接你要搜索什么变化。

,如果你要搜索的词是"bill"然后

/* 
* returns url of search term using jsoup 
*/ 
public static String getUrl(String search) throws IOException{ 
    String url = "http://wordnetweb.princeton.edu/perl/webwn?s="; 
    Document doc = Jsoup.connect(url + search).get(); 
    String newURL = doc.location().toString(); 
    System.out.println(newURL); 
    return (newURL); 
} 

然后如果你只是想测试一个词是你可以做一个字

/* 
* returns true if is a word 
*/ 
public static boolean isWord(String search) throws IOException{ 

    String url = "http://wordnetweb.princeton.edu/perl/webwn?s="; 
    String notAWord = "Your search did not return any results."; 

    Document doc = Jsoup.connect(url + search).get(); 
    String searchH3 = doc.select("h3").text(); 

    return searchH3.contains(notAWord) ? false : true; 

} 

,如果你想请发布帖子,但是您可以使用Connection.Response来获得您的post的回复。您只需要将import org.jsoup.Connection作为导入来使用Connection API。

public static String getUrl(String search) throws IOException{ 

    Connection.Response wordForm = Jsoup.connect("http://wordnetweb.princeton.edu/perl/webwn") 
      .method(Connection.Method.GET) 
      .execute(); 

    String url = "http://wordnetweb.princeton.edu/perl/webwn"; 
    Document doc = Jsoup.connect(url) 
      .data("s", search) 
      .data("o2", "") 
      .data("o0", "1") 
      .data("o8", "1") 
      .data("o1", "1") 
      .data("o7", "") 
      .data("o5", "") 
      .data("o9", "") 
      .data("o6", "") 
      .data("o3", "") 
      .data("o4", "") 
      .data("h", "") 
      .cookies(wordForm.cookies()) 
      .post(); 

    System.out.println(doc); 

    String newURL = doc.location().toString(); 
    return (newURL); 
} 

一个类似的例子可以发现here

+1

太感谢你了!我不知道我可以做到这一点。 – mikedaabeast

+0

如果您好奇,我更新了如何解决您当前案例的答案。 –