0

リンクがあります:

String url = "http://username:password@url.com"

そして、サイトから情報を読み込みたい。loadStrings(url)、loadXML(url) (情報は実際には xml にあります) を使用してみましたが、ダイスはありません。HTTP ステータス 401 が返されます。

HTTP クライアントを作成することが最も有望に思えましたが、まだ動作させることができません。これはコードです:

import processing.net.*;
Client c;
String data;

void setup() {
  size(600, 600);
  c = new Client(this, "http://username:password@my.idigi.com/ws/DataPoint/dia/channel/00000000-00000000-00409DFF-FF521E03/XBee_4079C12D/spikes_back", 80);
  c.write("GET / HTTP/1.0\r\n");      
}

void draw() {
    if (c.available() > 0) {
    data = c.readString();
    println(data);
  }
}

これは私が得るエラーです:

java.net.UnknownHostException: http://username:password@my.idigi.com/ws/DataPoint/dia/channel/00000000-00000000-00409DFF-FF521E03/XBee_4079C12D/spikes_back
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:195)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:432)
    at java.net.Socket.connect(Socket.java:529)
    at java.net.Socket.connect(Socket.java:478)
    at java.net.Socket.<init>(Socket.java:375)
    at java.net.Socket.<init>(Socket.java:189)
    at processing.net.Client.<init>(Unknown Source)
    at getSoundData.setup(getSoundData.java:28)
    at processing.core.PApplet.handleDraw(PApplet.java:2117)
    at processing.core.PGraphicsJava2D.requestDraw(PGraphicsJava2D.java:193)
    at processing.core.PApplet.run(PApplet.java:2020)
    at java.lang.Thread.run(Thread.java:680)
java.lang.NullPointerException
    at processing.net.Client.write(Unknown Source)
    at processing.net.Client.write(Unknown Source)
    at getSoundData.setup(getSoundData.java:29)
    at processing.core.PApplet.handleDraw(PApplet.java:2117)
    at processing.core.PGraphicsJava2D.requestDraw(PGraphicsJava2D.java:193)
    at processing.core.PApplet.run(PApplet.java:2020)
    at java.lang.Thread.run(Thread.java:680)
4

2 に答える 2

0

HTTP ヘッダーを適切に設定していないだけです。これが機能する例です。パスワードで保護されたテストファイルをセットアップしました。

import processing.net.*; 
import javax.xml.bind.DatatypeConverter; //for Base64 encoding
Client c; 
String dataIn;
String[] headerData;

String host = "fla.sc";
String file = "/testfile";

//The username and password need to be set in Base64
String auth = DatatypeConverter.printBase64Binary("user:password".getBytes());

void setup(){
  size(200, 200);
  c = new Client(this, host, 80);
  c.write("GET " + file + " HTTP/1.1\n");
  c.write("Authorization:  basic  " + auth + "\n");
  c.write("Host: " + host + "\n"); // the host to connect to
  c.write("\n"); // close the header
}

void draw() { 
  if (c.available() > 0) {
    dataIn = c.readString();
    println(dataIn);
    headerData = split(dataIn, '\n');
    for(int i=0; i<headerData.length; i++){
      print(i);
      print(": ");
      println(headerData[i]);
    }
  }
}

あなたのユースケースでは、このコードが機能する可能性がありますが、適切なユーザー名とパスワードがないとテストできません。

import processing.net.*; 
import javax.xml.bind.DatatypeConverter; //for Base64 encoding
Client c; 
String dataIn;
String[] headerData;

String host = "my.idigi.com";
String file = "/ws/DataPoint/dia/channel/00000000-00000000-00409DFF-FF521E03/XBee_4079C12D/spikes_back";

//The username and password need to be set in Base64
String auth = DatatypeConverter.printBase64Binary("username:password".getBytes());

void setup(){
  size(200, 200);
  c = new Client(this, host, 80);
  c.write("GET " + file + " HTTP/1.1\n");
  c.write("Authorization:  basic  " + auth + "\n");
  c.write("Host: " + host + "\n"); // the host to connect to
  c.write("\n"); // close the header
}

void draw() { 
  if (c.available() > 0) {
    dataIn = c.readString();
    println(dataIn);
    headerData = split(dataIn, '\n');
    for(int i=0; i<headerData.length; i++){
      print(i);
      print(": ");
      println(headerData[i]);
    }
  }
}
于 2012-12-19T19:48:11.820 に答える
0

processing.net ライブラリの代わりに、java.net ライブラリを使用しました。ここでいくつかの答えを見つけることができました。それを処理に入れると、次のようになりました。

import java.net.*;
String baseURL = "http://my.idigi.com/ws/DataPoint/dia/channel/00000000-00000000-00409DFF-FF521E03/XBee_4079C12D/spikes_back";
URL url;
String userPassword = "user"+":"+"password";

void setup() {
  size(600, 600);
  try {
    String encoding = new sun.misc.BASE64Encoder().encode(userPassword.getBytes());
    url = new URL(baseURL);
    HttpURLConnection conn = (HttpURLConnection)url.openConnection();
    conn.setRequestProperty("Authorization", "Basic " + encoding);
    conn.connect();
    println(conn.getResponseCode());
    println(conn.getContent());
  } 
  catch (Exception e) {
    println("exception" + e);
  }
}

void draw() {
}
于 2012-12-11T00:49:23.183 に答える