2016-11-01 79 views
2

我想從一個Stardog三重商店獲取一些數據到Angular,但我真的很難讓它工作。使用完全相同的標題和參數從curl訪問服務時,我沒有任何問題。我也嘗試省略參數部分,只輸入完整的URL('localhost:5820/myDB/query?reasoning = false & query = SELECT * WHERE {?s?p?o}'),但沒有運氣。HTTP GET請求頭和Angular 2中的參數

private _queryUrl = 'http://localhost:5820/myDB/query'; 

constructor(private _http: Http) {} 

getData() { 
    let username : string = 'admin'; 
    let password : string = 'admin'; 

    let headers = new Headers(); 
    headers.append('Authorization', "Basic " + btoa(username + ":" + password)); 
    headers.append('Content-Type', 'application/rdf+xml'); 
    headers.append('Accept', 'application/sparql-results+json'); 

    let params = new URLSearchParams(); 
    params.set('reasoning', 'false'); 
    params.set('query', 'SELECT * WHERE {?s ?p ?o}'); 

    let options = new RequestOptions({ headers: headers, search: params }); 

    return this._http 
     .get(this._queryUrl, options) 
     .map((res: Response) => res.json()); 
} 

回答

0

您在指定內容類型爲application/rdf+xml這是錯誤的(沒有內容)。如SPARQL spec所述,在這種情況下,您不應該有內容類型,而在其他情況下,您應該使用application/x-www-form-urlencoded(通過URL編碼的POST進行查詢)或application/sparql-query(通過POST直接進行查詢)。

+0

謝謝你澄清這一點。不幸的是,當我刪除這個標題時,我仍然收到一個404。 – MadsHolten

0

好的,所以我需要的是一個良好的睡眠。問題是我已經建立了一個內存測試API來模仿一個真正的API。上面的代碼就像一個魅力:D