2012-03-17 10 views
5

Tôi đang cố gọi một dịch vụ web từ khung chơi và tôi nghĩ mình đang làm sai. Tôi có một cuộc gọi ví dụ để http://www.myweather2.com/developer/forecast.ashx?uac=eDKGlpcBQN&query=52.6%2C-4.4&output=xmlthực hiện yêu cầu GET đối với dịch vụ web từ playframework 2.0

Một đoạn từ những gì tôi đang cố gắng từ play framework như sau:

val response = WS.url("http://www.myweather2.com/developer/forecast.ashx?uac=eDKGlpcBQN&query=52.6%2C-4.4&output=xml").get.get() 
val body = response.getBody 

Khi tôi gọi này, cơ thể bao gồm "useraccount không tồn tại". Khi tôi chỉ đặt url này vào trình duyệt, tôi nhận được phản hồi mà tôi đang tìm kiếm. Tôi làm gì sai ở đây?

+0

Thật lạ, nó thậm chí hoạt động khi sử dụng 'curl'. –

+0

'val' ở đây có nghĩa là gì, đó là một lớp học chơi? – area5one

Trả lời

9

Đối với một số lý do, tôi đã nhận được WS từ việc nhập khẩu sai. Khi tôi sửa các mục nhập thành import play.api.libs.ws.WS, nó đã hoạt động. Tôi vẫn ngạc nhiên khi làm việc nửa chừng với việc nhập nhầm

+0

Nhập nào là đúng? Tôi đã sử dụng 'import play.libs._'. –

+0

Câu trả lời đã chỉnh sửa, thật ngu ngốc khi không thêm – Martijn

+0

Tài liệu về khung công tác phát đề cập đến việc nhập khác và không hoạt động. Không chắc chắn lý do tại sao. Rất may, ai đó đã tìm ra lý do. Đã có một thời gian khó khăn để tìm ra điều này. –

2

Không biết về "useraccount không tồn tại" nhưng điều này dường như làm việc:

val promise = WS.url("http://www.myweather2.com/developer/forecast.ashx?uac=eDKGlpcBQN&query=52.6%2C-4.4&output=xml").get() 
    val body = promise.value.get.body 

Edit: Removed không gian.

Ngoài ra hãy chắc chắn soạn thảo của bạn không được chèn một \n hoặc \r sau ?

+0

'promise.value' không hoạt động đối với tôi. Đó là một phần của play2.0? Ngoài ra, là không gian đó được cho là có sau khi? – Martijn

+0

for promise.value, xem [tại đây] (http://www.playframework.org/documentation/api/2.0/scala/index.html#play.api.libs.concurrent.Promise) – Jamil

+0

Cảm ơn, tôi có nó – Martijn

2

Tôi biết điều này là cũ, nhưng tôi đã giải quyết vấn đề này trong khi cố gắng làm điều tương tự - nhận được kết quả tương tự.

biến GET phải được thông qua với WS.url ("http: // ...") .setQueryParameter (key, value)

Ví dụ:

val promise = WS.url("http://www.myweather2.com/developer/forecast.ashx").setQueryParameter("uac", "eDKGlpcBQN").setQueryParameter("query", "52.6%2C-4.4").setQueryParameter("output", "xml").get() 

Annoying, nhưng một tương đối đơn giản sửa chữa.