2

私はgrailsアプリに取り組んでおり、すでに数時間リクエストからhtmlコードを取得しようとしています。私がやりたいことは、プレーンな html (webPage ソースのように、すべてのタグなどを含む) を取得して、それに取り組むことができるようにすることです。

私はすでにこのコードを使用して get リクエストのためにそれを取得することができました:

url = ("http://google.com").toURL().getText())

問題なく動作しますが、投稿リクエストもできる必要があります。

httpBuilder を試してみましたが、得られる応答は整形式のテキスト (空白などを含む) のように見えますが、html タグがなく、それらが必要です。私が使用しているコードは次のようになります。

def url = "http://urlToRemoteServer.com/"
def http = new HTTPBuilder(url);


http.post( path: 'pathToMyApp',
        requestContentType: "text/xml" ) { resp, reader ->

            println "Tweet response status: ${resp.statusLine}"
            assert resp.statusLine.statusCode == 200
            System.out << reader
        }

そのhtmlコードを取得する方法を誰か教えてもらえますか? 私は groovy に取り組んでいますが、Java ソリューションも同様に優れています。

4

3 に答える 3

2

以下のようにポストマップを変更して、contentTypeプレーンテキストの解析を強制する (そして、Acceptsヘッダーに変更すると思います) を含めます。

http.post( path: 'pathToMyApp',
           requestContentType: "text/xml",
           contentType: "text/xml") { resp, reader ->

ParserRegistryまたは、コンストラクターの後にリマップを追加することで、このリクエストと将来のリクエストのパーサーを変更できます。

http.parser.'text/html' = http.parser.'text/plain'

setContentType()コンストラクターが を呼び出した後に、への呼び出しを追加することもできHTTPBuilderます。

//...
def http = new HTTPBuilder(url);  //existing code
http.contentType = ContentType.TEXT //new addition
http.post( path: 'pathToMyApp', //existing code
//...
于 2012-12-18T19:15:18.423 に答える
1

あなたがそれをすることができる別の方法:

import static groovyx.net.http.ContentType.TEXT 
import static groovyx.net.http.ContentType.URLENC       

def url = "http://urlToRemoteServer.com/"

def http = new HTTPBuilder(url);

http.request( Method.POST, TEXT) { resp, reader ->

    println "Tweet response status: ${resp.statusLine}"
    assert resp.statusLine.statusCode == 200
    println reader.text
}

http://groovy.codehaus.org/modules/http-builder/doc/contentTypes.htmlに含まれている情報に大まかに基づいています

于 2012-12-18T19:31:53.830 に答える
0
public static post(String url, String data, def contentType = ContentType.XML) {
    def client = new HTTPBuilder(url)
    def xml = null
    client.request(groovyx.net.http.Method.POST) {
        contentType = contentType
        requestContentType = contentType  
        body = data
        response.success = { resp, raw ->
            println "Success response: ${resp.statusLine} ->\n${raw.text}"
            xml = [status: resp.statusLine, response:raw]
        }
        response.failure = { resp, raw ->
            println "Error response: ${resp.statusLine} ->\n${raw.text}"
            xml = [status: resp.statusLine, response:raw]
        }      
    } 
    return xml
}
于 2012-12-18T20:21:54.120 に答える